读书人

专家来看超级难语法题解决思路

发布时间: 2012-02-07 17:45:36 作者: rapoo

专家来看,超级难语法题
如何调用模板参数类型的构造函数?

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,楼主就不会这么想了。

读书人网 >C++

热点推荐