是否提升Lambda/Phoenix支持出类似lambda的返回另一个lambda?Boost Lambda/Phoenix - 如何做lambda返回另一个lambda?
例如,可以用来做某种哗众取宠的:
std::cout << [](int x){return [=](int y){return x+y;};}(1)(2);
如何实现与升压LAMBDA /凤凰类似的目的(+作为奖金 - 我们将获得多态行为)?
是否提升Lambda/Phoenix支持出类似lambda的返回另一个lambda?Boost Lambda/Phoenix - 如何做lambda返回另一个lambda?
例如,可以用来做某种哗众取宠的:
std::cout << [](int x){return [=](int y){return x+y;};}(1)(2);
如何实现与升压LAMBDA /凤凰类似的目的(+作为奖金 - 我们将获得多态行为)?
Boost Phoenix Scope: let/lambda
#include <boost/phoenix.hpp>
#include <iostream>
#include <ostream>
using namespace std;
using namespace boost;
using namespace phoenix;
using namespace arg_names;
using namespace local_names;
int main()
{
// capture by reference:
cout <<
(lambda(_a=_1)[_1 + _a ])(1)(2)
<< endl;
cout <<
(lambda(_b=_1)[lambda(_a=_1)[_1 + _a + _b ]])(1)(2)(3)
<< endl;
// capture by value:
cout <<
(lambda(_a=val(_1))[_1 + _a ])(1)(2)
<< endl;
cout <<
(lambda(_b=val(_1))[lambda(_a=val(_1))[_1 + _a + _b ]])(1)(2)(3)
<< endl;
}
输出是:
3
6
3
6
这就是我在找的,谢谢! – qble 2013-03-06 16:26:45
@EvgenyPanasyuk是否有一种简单的方法来生成惰性评估,比如'[&]() - > void {fully_bound_expression_that_does_not_run_until_later; }'? – Yakk 2013-03-09 14:11:07
@Yakk,请您详细描述一下您的意思(可能通过C++ 11 lambda表达式的完整示例)?你的意思是http://liveworkspace.org/code/30jCv6$0?或者也许http://liveworkspace.org/code/2Kon3g$0? – 2013-03-09 16:34:08
我在试图回答这是'arg1'得到由最外层的'bind'消耗的问题 - 我想要一个'arg1'我可以传递给内部''bind',但是外部的'bind'会代替它。如果我有办法“逃避”参数占位符... – Yakk 2013-03-04 20:11:43
@Yakk,你可以尝试使用boost :: bind-AFAIK它不同于lambda/phoenix bind(http://www.boost.org/doc/) libs/1_53_0/doc/html/lambda/s08.html#idp111396608)。此外,你的尝试后代码作为答案 - 赏金明天结束... – qble 2013-03-05 11:00:37