定义lambda创建



我如何制作一个通用的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来实现,你需要一个带有重载函数调用运算符的自定义函子。

最新更新