C++模板挑战

1 c++ inheritance gcc templates

关于模板实例化和继承,我一直面临着一个巨大的挑战(至少对我而言).我们来看看这段代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,有一个名为Convertible的类,只有一个执行类型转换的模板方法.还有一个继承自Convertible的模板类,然后是继承自前一个的模板类.最后一个模板类实现了一个使用模板方法AsPtrTo的方法,该方法应该从Convertible继承,并在编译期间为main函数中使用的类型T实例化.

由于某些原因我无法理解,这失败了.GCC 4.4.1给了我这样的信息:

错误:'int'之前的预期primary-expression

我已经标出了错误的一行.

我想也许这里的C++专家可以帮我一把.

提前谢谢大家!

Naw*_*waz 6

您需要使用关键字template:

 t.template AsPtrTo<int>(); 
Run Code Online (Sandbox Code Playgroud)

这已经讨论了很多次,你会在SO上找到无数的帖子.

但在这里你会发现一个最好的解释: