Boost Lambda/Phoenix-如何处理返回另一个Lambda的Lambda

Boost Lambda/Phoenix - how to do lambda which returns another lambda?

本文关键字:Lambda 处理 返回 另一个 Phoenix- 何处理 Boost      更新时间:2023-10-16

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

例如,它可以用来进行某种货币兑换:

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

如何使用Boost Lambda/Phoenix实现类似的目的(+作为奖励-我们将获得多态行为(?

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