C++ 增强Lambda/凤凰-如何处理返回另一个Lambda的Lambda?

C++ 增强Lambda/凤凰-如何处理返回另一个Lambda的Lambda?,c++,boost,lambda,functional-programming,currying,C++,Boost,Lambda,Functional Programming,Currying,Boost Lambda/Phoenix是否支持开箱即用的类似于返回另一个Lambda的Lambda的东西 例如,可以用来做某种咖喱菜: std::cout << [](int x){return [=](int y){return x+y;};}(1)(2); std::cout 我试图回答这个问题时遇到的问题是,arg1被最外层的bind消耗——我想要一个arg1我可以传递到内部的bind,但是外部的bind会吃掉它。如果我有办法“转义”参数占位符…@Yakk,您可以尝试使用

Boost Lambda/Phoenix是否支持开箱即用的类似于返回另一个Lambda的Lambda的东西

例如,可以用来做某种咖喱菜:

std::cout << [](int x){return [=](int y){return x+y;};}(1)(2);
std::cout


我试图回答这个问题时遇到的问题是,
arg1
被最外层的
bind
消耗——我想要一个
arg1
我可以传递到内部的
bind
,但是外部的
bind
会吃掉它。如果我有办法“转义”参数占位符…@Yakk,您可以尝试使用boost::bind-AFAIK,它不同于lambda/phoenix bind()。还有,你的“尝试回答-赏金”明天就要结束了…@evgenypanasuk有没有一种简单的方法来生成一个懒惰的评估,比如
[&]()->void{fully\u bound\u expression}直到晚些时候才会运行
?@Yakk,你能详细描述一下你的意思吗(可能通过C++11 lambdas的完整示例)?你是说?或者可能?
void一些_函数(intx);自动延迟函数x=[](int x){return[=]{some_function(x);};};自动懒做=懒做(5);懒惰的,懒惰的--当我天真地尝试使用
bind
时,当每个参数都被绑定时,它会计算表达式。相反,我想延迟地
绑定
,因此只有在我计算(使用
()
)绑定
@Yakk,std::bind的空值结果后,最终执行才会发生:auto lazy=bind(some_函数,11);懒惰();
#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