我有一个问题。有两个类:
struct Base {
Base* retain() {
//retain here
return this;
}
};
struct Derived : Base {
};
Derived *d1 = new Derived();
Derived *d2 = d1->retain(); //error here: need to typecast to Derived*
Derived *d3 = (Derived*)d1->retain(); //OK
有没有什么方法可以以不需要手动类型转换结果的方式重写 retain() 函数?换句话说:retain() 应该返回派生类型的对象。
最佳答案
template<typename T>
struct Base
{
T* retain()
{
return (T*)this;
}
};
struct Derived : Base<Derived>
{
};
Derived *d1 = new Derived();
Derived *d2 = d1->retain();
或者:
struct Base
{
template<typename T>
void retain(T** ptr)
{
*ptr = (T*)this;
}
};
struct Derived : Base
{
};
Derived *d1 = new Derived;
Derived *d2;
d1->retain(&d2);
关于c++ - C++中的类型转换和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9953077/