我有一个带有 std::function 构造函数参数的类。
class ClazzA{
public:
ClazzA(function<void()> foo){}
ClazzA(){
ClazzA([](){});
}
};
如果我有一个此类的实例作为另一个类的成员,我必须在初始化列表中调用构造函数。我可以传递一个 lambda 作为参数,它会自动转换:
class ClazzB{
public:
ClazzA a;
ClazzB() :
// works fine:
a([](){}){}
};
但是如果 ClazzB 是一个模板,lambda 不起作用:
template<typename T> class ClazzC{
public:
ClazzA a;
//works fine:
ClazzC(function<void()> foo) : a(foo){}
//doesn't work:
ClazzC() :
//syntax error : ')'
a([](){})
//syntax error : '{'
//unexpected token(s) preceding '{'; skipping apparent function body
{}
};
编译器是 MSVC++ 2010。我不明白我做错了什么或者为什么不支持这种语法。
一开始ClazzA也是模板,函数有点复杂,以为是模板lambda什么的问题。但在我删除所有代码后,问题仍然存在。
UPD:尝试在 MinGW G++ 中编译,它有效。看起来像是 Visual Studio 问题。
最佳答案
这是一个 MSVS C++0x 实现问题(请参阅问题下的评论)。问题解决了。
关于c++ - 无法在 C++ 模板的初始化列表中使用 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6624470/