【发布时间】:2010-08-13 22:15:05
【问题描述】:
我有一个模板类 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。我可以进行显式转换,但这需要将第二个参数传递给模板类,而且似乎应该有更好的解决方案。有吗?
【问题讨论】:
-
另一种解决方案是让 MyClass 的构造函数采用
MyTemplate<MyClass>*参数。 -
@UncleBens 在我的真实代码中,MyTemplate2 有一些在 MyClass 的构造函数中使用的附加属性/方法。
-
然后在 MyClass 的构造函数中进行转换,如果您不想在 MyTemplate 构造函数中进行转换(这会有点令人不安,因为您会介绍有关派生类存在的知识进入那个基地)。
标签: c++ templates inheritance compiler-errors