aim*_*ozg 11 c++ lambda templates constructor c++11
我有一个带有std :: function构造函数参数的类.
class ClazzA{
public:
ClazzA(function<void()> foo){}
ClazzA(){
ClazzA([](){});
}
};
Run Code Online (Sandbox Code Playgroud)
如果我有一个这个类的实例作为另一个的成员,我必须在初始化列表中调用构造函数.我可以传递一个lambda作为参数,它会自动转换:
class ClazzB{
public:
ClazzA a;
ClazzB() :
// works fine:
a([](){}){}
};
Run Code Online (Sandbox Code Playgroud)
但是如果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
{}
};
Run Code Online (Sandbox Code Playgroud)
编译器是MSVC++ 2010.我不明白我做错了什么或为什么不支持这种语法.
起初ClazzA也是一个模板,功能有点复杂,所以我认为这是模板化lambda或其他问题.但在我删除所有代码之后问题仍然存在.
UPD:尝试在MinGW G ++中编译,它可以工作.看起来像Visual Studio问题.
| 归档时间: |
|
| 查看次数: |
1157 次 |
| 最近记录: |