所以我写了一个函数,它组成了"顺序"的void lambdas,这样我就可以在算法中一次使用它们:
template <typename F, typename... Fs>
auto lambdaList(F f, Fs... fs)
{
return [=] (auto&... args) { f(args...); lambdaList(fs...)(args...); };
}
template <typename F>
auto lambdaList(F f)
{
return [=] (auto&... args) { f(args...); };
}
Run Code Online (Sandbox Code Playgroud)
如果我使用本地lambda,它可以工作,但是当我在不同的命名空间中使用函数时,它不起作用:
#include <iostream>
namespace foo {
void a() { std::cout << "a\n"; }
void b() { std::cout << "b\n"; }
}
template <typename F, typename... Fs>
auto lambdaList(F f, Fs... fs)
{
return [=] (auto&... args) { f(args...); lambdaList(fs...)(args...); };
}
template <typename …Run Code Online (Sandbox Code Playgroud)