我如何制作一个通用的lambda创建者,例如:
#define LAMBDA(f, args...)
创建lambda:
[&](){ return f(args...); };
所以我可以做:
int main
{
int a, b, c, d;
auto lambda4 = LAMBDA(foo4, a, b , c, d);
int e, f;
auto lambda2 = LAMBDA(foo2, e, f);
}
我被限制使用C++14。
请不要为此使用宏。它只是混淆了代码。
最佳解决方案是std::bind_front
:
auto l4 = std::bind_front(foo4, a, b, c, d);
但这是C++20。
使用C++14,您可以使用std::bind
。但是你声明你不能使用它。
然后,我们要实现一个bind-full函数。使用复制语义很简单:
template <class F, class... Args>
constexpr auto bind_full(F f, Args... args)
noexcept (noexcept (f(args...)))
{
return [=]() {
return f(args...);
};
}
auto foo_bind = bind_full(foo4, a, b, c, d);
return foo_bind()
不过,为正向语义优化它似乎很难。你不能用lambda来实现,你需要一个带有重载函数调用运算符的自定义函子。