专家来看,超级难语法题
如何调用模板参数类型的构造函数?
template <typename T>
class A
{ void me()
{
T *a; a-> T::T(); //错误,这里调用了一个叫T的函数,而不是构造函数
}
};
[解决办法]
这个例子说明了模版不是macro,
T::T()不会替换为MyClass::MyClass();(lz贼有想象力)
调用构造函数是编译器对下述语法的翻译的结果。
可以调用MyClass::MyClass()的方式是。
MyClass m;// = MyClass();
MyClass* p = new MyClass();
new (p) MyClass();
原因是这些语言把ctor的名字定为了和className相同的。
如果是VB, Python, Ruby,楼主就不会这么想了。