我在识别一些简单的boost :: lambda使用问题时遇到了一些麻烦。我可以像这样制作一个简单的lambda函数:
int i = 0;
boost::lambda::var(i) = boost::lambda::_3; // Set 'i' to the 3rd parameter.
但是只要我将lambda函数包装在bind中:
int i = 0;
boost::bind(boost::lambda::var(i) = boost::lambda::_3); // Set 'i' to the 3rd parameter.
它变得无法使用:
(boost::lambda::var(i) = boost::lambda::_3)(0,1,2); // Compiles & behaves as expected. i == 2
boost::bind(boost::lambda::var(i) = boost::lambda::_3)(0, 1, 2); // Compile error
boost :: lambda :: var确实产生了一个可绑定的函数吗?我是否以某种方式捏造了语法?它往往是简单的东西,任何你可以流下的光都被赞赏:)
(使用MSVC2008& boost v1.50编译)
答案 0 :(得分:1)
我认为你需要防止替换
在这种情况下,boost::lambda::protect
似乎按顺序
另外,检查Boost Bind与Boost Lambda的关系:
http://www.boost.org/doc/libs/1_55_0/doc/html/lambda/s08.html#idp153645176
Boost Bind [bind]库与BLL具有部分重叠的功能。基本上,Boost Bind库(续集中的BB)实现了BLL的绑定表达式部分。但是,有一些语义差异。
BLL和BB分别演变,并有不同的实现。这意味着来自BB的绑定表达式不能在BLL 的绑定表达式或其他类型的lambda表达式中使用。在BB中使用BLL绑定表达式也是如此。但是,这些库可以共存,因为BB库的名称在boost名称空间中,而BLL名称在boost :: lambda名称空间中。
有关该页面的更多信息