继承自模板类会导致错误

时间:2010-08-13 22:15:06

标签: c++ templates inheritance compiler-errors

我有一个模板类MyTemplate。它工作正常。但是一旦我创建了另一个派生的类,我就会出错。

//main.cpp
template <typename T> class MyTemplate {
    public:
        T* test() {
            return new T(this); //error here.
        }
};

template <typename T> class MyTemplate2 : public MyTemplate<T> { 
};

class MyClass {
    public:
        MyClass(MyTemplate2<MyClass>* source) {
        }
};

int main() {
    MyTemplate2<MyClass>().test();
    return 0;
}

我得到的错误是:main.cpp|4|error: invalid conversion from 'MyTemplate<MyClass>* const' to 'MyTemplate2<MyClass>*'

据我了解错误,MyTemplate中的“this”是MyTemplate类型。但我希望它是MyTemplate2。我可以进行显式转换,但这需要将第二个参数传递给模板类,似乎应该有更好的解决方案。有吗?

2 个答案:

答案 0 :(得分:3)

您尝试的只是将Base*this)传递给Derived*,这是错误的方法。您需要显式转换才能执行此向下转换。

答案 1 :(得分:0)

使用“克隆”方法怎么样?

template <typename T> class MyTemplate { 
    public: 
        T* test() { 
            return clone(); //error here. 
        } 
        virtual T *clone() = 0;
}; 

template <typename T> class MyTemplate2 : public MyTemplate<T> {  
    public:
        T *clone(){return new T(this);}
}; 

class MyClass { 
    public: 
        MyClass(MyTemplate2<MyClass>* source) { 
        } 
}; 

int main() { 
    MyTemplate2<MyClass>().test(); 
    return 0; 
}