我想出了一个使用 protected 嵌套结构的类,旨在让派生类来扩充该结构。为此,我声明了一个用于分配结构的虚拟方法。
现在,基类在 processSomeData
中完成了一些不小的工作,我希望派生类重用它。
这会导致以下结果:
class A
{
public:
virtual void doProcessing(); // uses processSomeData()
protected:
struct someData
{
virtual ~someData() {};
// data members
};
virtual someData* processSomeData(); // uses allocateSomeData()
virtual someData* allocateSomeData();
};
class B : public A
{
public:
virtual void doProcessing()
{
derivedData* myData =
static_cast<derivedData*>(A::processSomeData()); // *** seems a little suspect
// do work on the additional data members in myData
}
protected:
struct derivedData : public someData
{
// more data members
};
virtual derivedData* allocateSomeData();
};
因为allocateSomeData
被覆盖,我知道A::processSomeData
正在返回一个someData*
指向衍生数据
>,所以static_cast绝对是安全的。
也就是说,当其他一切看起来都很合理时,我必须从基础转换为派生,这感觉有点不对劲。
有没有更好/正确的方法来做到这一点,而不使用 Actor ?或者我是否必须重新设计我的类/结构?
最佳答案
这是因为编译器不确定 processSomeData 使用 allocateSomeData 来创建 someData 结构。就编译器所知的 someData 而言,从 processSomeData 返回的很可能只是 someData 的一个实例。衍生数据是一些数据,但反之则不然。
关于c++ - 替代基类 protected 方法的返回指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30822642/