在C ++ 11中使用lambda中封闭函数的模板类型是否可以?

时间:2013-02-01 03:46:58

标签: c++ templates c++11 lambda

所以我目前有一些类似的代码:

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

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

它在Visual Studio 2010中运行良好,但我知道它不能保证它是符合标准的C ++。就使用lambda中的模板参数而言,这有什么问题吗?

1 个答案:

答案 0 :(得分:1)

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

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

  

9一个lambda表达式,其最小的封闭范围是块范围   (3.3.3)是局部lambda表达式;任何其他lambda表达式   在其lambda介绍人中不得有捕获列表。到达   本地lambda表达式的范围是封闭范围的集合   包括最里面的封闭函数及其参数