班级基地 { 基地*下一个; }
class Class1 : Base
{
}
Base* pBase = new Base();
Class1* pTest = new Class1();
pBase->next = pTest;
Class1* pClass1;
pClass1 = (Class1*)pBase->next;
我希望能够写
pClass1 = pBase->next;
并且没有编译错误C2440(无法转换)。或者换句话说,我希望pClass1指向pBase->下一个指向的类。
是否可能出现一些运算符重载?怎么做?
答案 0 :(得分:2)
template<class T>
class Base
{
T* next;
}
class Class1 : Base<Class1>
{
}
Class1* pTest1 = new Class1();
Class1* pTest2 = new Class1();
pTest1->next = pTest2;
Class1* pClass1;
pClass1 = pTest1->next;
答案 1 :(得分:1)
如果 - 在开发时 - 你确定下一个指向Class1的实例,接下来是一个Class1指针而不是Base指针。
如果您不确定,并且只在编译时知道它,则必须使用动态强制转换(可能接下来将指向Class2实例)。
答案 2 :(得分:1)
我能得到的最接近的是:
class Class1;
class Base
{
public:
Base* next;
operator Class1*()
{
return (Class1*)this;
}
};
class Class1 : public Base
{
};
和
Base* pBase = new Base();
Class1* pTest = new Class1();
pBase->next = pTest;
Class1* pClass1;
pClass1 = *pBase->next;
但这实际上是用C ++来搞乱你以后要付出的代价。只需使用Patrick提到的其中一个演员阵容。