我想缩短以下类型的lambdas:
[] (SomeVeryLongTemplateType<int, float, char, std::string>, AnotherLongType) {};
因为这个lambda的唯一原因是初始化一些类std::function<...>
成员 - 它没有捕获任何东西,它没有参数名称,它什么都不返回,它什么都不做。
如果缩短操作表示为签名中参数数量的函数,那么我希望此函数具有复杂度O(1)。
有办法吗?
答案 0 :(得分:33)
看起来你正在寻找一个什么都不做的空lambda,这样你的std::function
对象将始终处于可调用状态!
如果是这样,那么使用这个可以重复使用的用于任意数量的参数:
static const struct empty_lambda_t //static and const applies to the object!
{
template<typename ...T>
void operator()(T && ... ) const {} //does nothing
}empty_lambda {}; //declare an object which is static and const
然后将其用作:
std::function<void()> fun1 = empty_lambda;
std::function<void(int,int)> fun2 = empty_lambda;
std::function<void(whatever)> fun3 = empty_lambda;
希望有所帮助。
答案 1 :(得分:11)
在C ++ 14中会有“泛型lambdas”,它应该简化参数中的长类型名称,如我所知:
auto lambda = [](auto x, auto y) {return x + y; };
这里auto
就像模板类型
答案 2 :(得分:1)
你正在寻找“多态性lambdas”。它们不存在(尚未),所以没有。
但是,如果正确使用typedef
s,您可以更轻松,因此您不必每次都输入整个内容。