首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在VC++ 2010中将lambda函数与boost::bind/std::bind一起使用?

如何在VC++ 2010中将lambda函数与boost::bind/std::bind一起使用?
EN

Stack Overflow用户
提问于 2011-01-05 17:36:32
回答 3查看 17.9K关注 0票数 16

我有一些lambda函数,我想使用boost::bind或std::bind来绑定它们。(不管是哪一个,只要它能用就行了。)不幸的是,它们都给了我不同的编译器错误:

代码语言:javascript
复制
auto f = [](){ cout<<"f()"<<endl; };
auto f2 = [](int x){ cout<<"f2() x="<<x<<endl; };

std::bind(f)(); //ok
std::bind(f2, 13)(); //error C2903: 'result' : symbol is neither a class template nor a function template

boost::bind(f)(); //error C2039: 'result_type' : is not a member of '`anonymous-namespace'::<lambda0>'
boost::bind(f2, 13)(); //error C2039: 'result_type' : is not a member of '`anonymous-namespace'::<lambda1>'

那么,最简单的解决方法是什么呢?

EN

Stack Overflow用户

回答已采纳

发布于 2011-01-05 21:03:52

需要手动指定返回类型:

代码语言:javascript
复制
boost::bind<void>(f)();
boost::bind<int>(f2, 13)();

如果你不想显式地告诉bind,你也可以编写一个模板函数来自动推断返回类型,使用Boost.FunctionTypes来检查你的lambda的运算符()。

票数 23
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4602568

复制
相关文章

相似问题

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