Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有办法缩短C++;11声明中的lambda签名?_C++_C++11_Lambda_Syntactic Sugar - Fatal编程技术网

C++ 有没有办法缩短C++;11声明中的lambda签名?

C++ 有没有办法缩短C++;11声明中的lambda签名?,c++,c++11,lambda,syntactic-sugar,C++,C++11,Lambda,Syntactic Sugar,我想缩短以下类型的lambda: [] (SomeVeryLongTemplateType<int, float, char, std::string>, AnotherLongType) {}; [](SomeVeryLongTemplateType,另一个longtype){}; 由于此lambda的唯一原因是初始化某个类std::function成员-它不捕获任何内容,没有参数名称,它不返回任何内容,也不执行任何操作 如果缩短操作表示为签名中参数数量的函数,那么我希望此函数

我想缩短以下类型的lambda:

[] (SomeVeryLongTemplateType<int, float, char, std::string>, AnotherLongType) {};
[](SomeVeryLongTemplateType,另一个longtype){};
由于此lambda的唯一原因是初始化某个类
std::function
成员-它不捕获任何内容,没有参数名称,它不返回任何内容,也不执行任何操作

如果缩短操作表示为签名中参数数量的函数,那么我希望此函数的复杂性为O(1)

有没有办法做到这一点?

您正在寻找“多态lambda”。它们(还)不存在,所以不存在


但是,通过正确使用
typedef
s,您可以使它变得更容易,这样您就不必每次都键入整个内容。

看起来您正在寻找一个空的lambda,它什么也不做,这样您的
std::function
对象将始终处于可调用状态

如果是,则对任意数量的参数使用可重复使用的:

static const struct empty\u lambda\u t//static and const应用于对象!
{
模板
void操作符()(T&&…)const{}//不执行任何操作
}空的λ{}//声明一个静态的常量对象
然后将其用作:

 std::function<void()>          fun1 = empty_lambda;
 std::function<void(int,int)>   fun2 = empty_lambda;
 std::function<void(whatever)>  fun3 = empty_lambda;
std::function fun1=empty_lambda;
std::function fun2=空的λ;
std::fun3函数=空λ;
希望这能有所帮助。

在C++14中,会有“泛型lambda”,据我所知,它可以简化参数中的长类型名称:

auto lambda = [](auto x, auto y) {return x + y; };
这里的
auto
类似于模板类型


吹毛求疵:
无论什么
都必须是
无效(无论什么)
。除了
void
@B:是之外,它不能有返回类型。编辑。谢谢:-)这有什么用?你能给我举个例子说明这一点有用吗?我想我应该向OP询问这件事,但是如果你能的话,那就太好了。@bolov:用途是可以调用函数对象(
fun1
)。另一方面,如果只声明这个
:std::function fun
(没有任何初始化),然后执行
fun(10)
将引发异常,因为
fun
中没有可调用的内容。@bolov:我不知道“null/default initialization”是什么意思。正如我在回答中所说,它是空的可调用实体,不做任何事情。所以,若用它初始化std::函数,那个么函数对象将处于可调用状态,这意味着若调用它,将不会抛出异常。如果这就是您所说的“空/默认初始化”,那么是的!
auto lambda = [](auto x, auto y) {return x + y; };