Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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+中使用lambdas中的封闭函数中的模板类型可以吗+;11?_C++_Templates_C++11_Lambda - Fatal编程技术网

C++ 在C+中使用lambdas中的封闭函数中的模板类型可以吗+;11?

C++ 在C+中使用lambdas中的封闭函数中的模板类型可以吗+;11?,c++,templates,c++11,lambda,C++,Templates,C++11,Lambda,所以我现在有一些类似的代码: (注意:不是实际的代码,只是为了简洁起见从一个有点长且复杂的方法中删减。) 模板 静态void addMethod(const std::string&name,FuncT func) { 方法脚本_func=[&](常量参数和参数)->Value { func(UnsafeAnyCast(args[0]),UnsafeAnyCast(args[1]); 返回值::未定义(); } _原型->集合(名称、脚本\u func); } 它在Visual Studio

所以我现在有一些类似的代码:

(注意:不是实际的代码,只是为了简洁起见从一个有点长且复杂的方法中删减。)

模板
静态void addMethod(const std::string&name,FuncT func)
{
方法脚本_func=[&](常量参数和参数)->Value
{
func(UnsafeAnyCast(args[0]),UnsafeAnyCast(args[1]);
返回值::未定义();
}
_原型->集合(名称、脚本\u func);
}

它在Visual Studio 2010中很好,但我知道这远远不能保证它是标准兼容的C++。在lambda中使用模板参数有什么问题吗?

是的,这符合标准:lambda表达式可以访问其封闭范围内的所有可见名称,您只需要捕获变量

5.1.2 Lambda表达式[expr.prim.Lambda]

9最小封闭范围为块范围的lambda表达式 (3.3.3)是一个局部lambda表达式;任何其他lambda表达式 其lambda介绍人中不应有捕获列表。到达 局部lambda表达式的作用域是封闭作用域的集合 包含最里面的封闭函数及其参数


它实际上与问题无关,但Arguments是一个容器类,用于在嵌入式脚本语言中通过函数调用传递参数。我的问题是在lambda中使用ArgT0和ArgT1模板类型是否符合标准。我理解这个问题。因为在函数的任何地方都看不到参数,所以我询问了它。
template<typename ArgT0, typename ArgT1, typename FuncT>
static void addMethod( const std::string& name, FuncT func )
{
   Method script_func = [&]( const Arguments& args ) -> Value
   {
      func(UnsafeAnyCast<ArgT0>(args[0]),UnsafeAnyCast<ArgT1>(args[1]));
      return Value::Undefined();
   }

   _prototype->Set( name, script_func );
}