6

Boost Lambda / Phoenixは、別のラムダを返すラムダのようなものをすぐにサポートしますか?

たとえば、それはある種のカリー化を行うために使用できます。

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

Boost Lambda / Phoenixで同様の目的を達成する方法(+ボーナスとして-ポリモーフィックな動作が得られます)?

4

1 に答える 1

5

Boost Phoenix スコープ: 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
于 2013-03-06T13:20:31.803 に答える