【发布时间】:2017-06-29 09:58:34
【问题描述】:
对于一个通用的树形结构,我正在使用一些看起来像这样的代码(以下代码是一个 MCVE):
template <typename T> class Base {
protected:
Base() {}
public:
T *ptr;
void setRelated() { ptr = this; }
};
class Derived : public Base<Derived> {};
int main() {
Derived d;
d.setRelated();
return 0;
}
基本原理:这样做的原因是为了让使用此类的开发人员不必为此类中使用的每个调用和算法将所有内容从基类转换为派生类再返回,尤其是基础是抽象的,不能自己实例化。
此代码无法编译。它说:
main.cpp:7: error: invalid conversion from ‘Base<Derived>*’ to ‘Derived*’ [-fpermissive]
void setRelated() { ptr = this; }
~~~~^~~~~~
问题:有没有办法使从Base<Derived>* 到Derived* 的所有转换都隐式(假设我们不应该重载每个方法)?
【问题讨论】:
标签: c++ class c++11 templates polymorphism