gpt4 book ai didi

c++ - Boost Lambda/Phoenix - 如何做返回另一个 lambda 的 lambda?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:03 26 4
gpt4 key购买 nike

Boost Lambda/Phoenix 是否支持开箱即用的东西,比如返回另一个 lambda 的 lambda?

例如,它可以用来做一些柯里化(Currying):

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

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

最佳答案

Boost Phoenix Scope: let/lambda

Live demo:

#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

关于c++ - Boost Lambda/Phoenix - 如何做返回另一个 lambda 的 lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15077121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com