boost :: lambda :: var嵌套在boost :: bind中,它本身不等同于boost :: lambda :: var

时间:2014-05-30 04:03:49

标签: c++ boost lambda c++03

我在识别一些简单的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编译)

1 个答案:

答案 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名称空间中。

有关该页面的更多信息