我有一个模板类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。我可以进行显式转换,但这需要将第二个参数传递给模板类,似乎应该有更好的解决方案。有吗?
答案 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;
}