关于模板实例化和继承,我一直面临着一个很大的挑战(至少对我而言)。让我们来看看下面的代码:C++模板挑战
class Convertible
{
public:
template<class T>
T* AsPtrTo()
{
return reinterpret_cast<T*>(this);
}
};
template<class T>
class TemplateBase : public Convertible
{
};
template<class T>
class TemplateDerived : public TemplateBase<T>
{
public:
void Method1(TemplateBase<T> t)
{
t.AsPtrTo<int>(); // <<<<<< ERROR
}
};
int main()
{
TemplateDerived<int> d;
TemplateBase<int> b;
d.Method1(b);
return 0;
}
正如你所看到的,还有一类,称为转换,与执行一个类型转换只是一个模板方法。还有一个从Convertible继承的模板类,然后是从前一个继承的另一个模板类。最后一个模板类实现了一个方法,该方法使用模板方法AsPtrTo,该方法在编译期间应该从Convertible继承,并在编译期间用于主函数中的类型T.
由于某种原因,我不明白,这失败了。 GCC 4.4.1给我这个消息:
error: expected primary-expression before 'int'
我已经标记了错误的行。
我想也许这里的一位C++专家可以帮我一把。
谢谢大家提前!
“'return reinterpret_cast(this)''你不是那么做,是吗? –
curiousguy
2011-12-19 05:49:14