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 );
}