在Java中,您可以执行以下代码:
Function<Integer, Integer> times2 = e -> e * 2;
Function<Integer, Integer> squared = e -> e * e;
times2.andThen(squared).apply(4);
C ++相当于andThen()
的硬币/复合新函子?谢谢。
答案 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做到)