对于通用树结构,我使用了一些看起来像这样的代码(以下代码是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*
(假设我们不应该重载每个方法)?