与Java的andThen()函数等效的C ++来组合新函数

时间:2018-08-22 15:02:21

标签: c++

在Java中,您可以执行以下代码:

Function<Integer, Integer> times2 = e -> e * 2;
Function<Integer, Integer> squared = e -> e * e; 
times2.andThen(squared).apply(4);  

C ++相当于andThen()的硬币/复合新函子?谢谢。

2 个答案:

答案 0 :(得分:2)

如果您愿意使用Boost,则需要Boost.HOF。 HOF(高阶函数)为compose函数适配器提供了以下语义

assert(compose(f, g)(xs...) == f(g(xs...)));

在您的情况下,您会这样做

auto composed = compose(squared, times2);
auto result = composed(4);

有关详细信息,请参见文档https://www.boost.org/doc/libs/1_68_0/libs/hof/doc/html/include/boost/hof/compose.html

答案 1 :(得分:0)

为什么不保持简单?

int times2thenSquared(int x) {
    x = times2(x);
    return squared(x);
}

(如果需要,也可以用lambda做到)