首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost::绑定为l值对象

boost::绑定为l值对象
EN

Stack Overflow用户
提问于 2011-09-16 19:42:37
回答 2查看 250关注 0票数 0

有没有办法做到这一点(微软VS2008)?

代码语言:javascript
复制
boost::bind mybinder = boost::bind(/*something is binded here*/);
mybinder(/*parameters here*/); // <--- first call
mybinder(/*another parameters here*/); // <--- one more call

我试过了

代码语言:javascript
复制
int foo(int){return 0;}

boost::bind<int(*)(int)> a = boost::bind(f, _1);

但它不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-16 19:47:54

绑定返回未指定的类型,因此不能直接创建该类型的变量。然而,有一个类型模板boost::function可以为任何函数或函数器类型构造。所以:

代码语言:javascript
复制
boost::function<int(int)> a = boost::bind(f, _1);

应该能行得通。另外,如果你不绑定任何值,只绑定占位符,你完全可以不绑定bind,因为function也可以从函数指针构造。所以:

代码语言:javascript
复制
boost::function<int(int)> a = &f;

只要fint f(int),就应该可以工作。该类型作为与C++11闭包一起使用的std::function传递给C++11 (以及bind,这也被接受):

代码语言:javascript
复制
std::function<int(int)> a = [](int i)->int { return f(i, 42); }

请注意,对于直接在C++11中调用它,auto的新用法更容易:

代码语言:javascript
复制
auto a = [](int i)->int { return f(i, 42); }

但是如果你想把它传递出去,std::function仍然会派上用场。

票数 2
EN

Stack Overflow用户

发布于 2011-09-16 19:47:16

代码语言:javascript
复制
int foo(int){return 0;}
boost::function<int(int)> a = boost::bind(f, _1);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7444170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档