对于以下代码:
auto F(int count) -> decltype([](int m) { return 0; })
{
return [](int m) { return 0; };
}
Run Code Online (Sandbox Code Playgroud)
g ++ 4.5给出错误:
test1.cpp:1:32: error: expected primary-expression before 'int'
test1.cpp:1:32: error: expected ')' before 'int'
Run Code Online (Sandbox Code Playgroud)
问题是什么?从函数返回lambda的正确方法是什么?
我有以下Python代码片段,我想用C++重现:
from itertools import count, imap
source = count(1)
pipe1 = imap(lambda x: 2 * x, source)
pipe2 = imap(lambda x: x + 1, pipe1)
sink = imap(lambda x: 3 * x, pipe2)
for i in sink:
print i
Run Code Online (Sandbox Code Playgroud)
我听说过Boost Phoenix,但我找不到transform像Python那样懒惰行为的例子imap.
编辑:为了澄清我的问题,我们的想法不仅仅是使用a来按顺序应用函数for,而是能够使用像std::transform无限生成器这样的算法.函数的组合方式(使用方言等功能更强的语言)也很重要,下一步是函数组合.
更新:感谢bradgonesurfing,David Brown和Xeo的惊人答案!我之所以选择Xeo是因为它是最简洁的,它让我在我想要的地方得到了正确的结果,但是David对于理解这些概念非常重要.此外,bradgonesurfing的倾斜Boost :: Range :).