c++ - 替代基类 protected 方法的返回指针?

标签 c++ casting

我想出了一个使用 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/

相关文章:

java接口(interface)避免强制转换

c# - 为什么简单的算术在没有强制转换的情况下不起作用?

c - 从没有强制转换的整数生成指针... DS1307、RTC、BCD

C++ Winsock unicode问题

c++ - OpenGL 更新顶点数组/缓冲区

c++ - OS X 中的 "Clang: error: no input files"

c++使用字符串的一部分查找字符串

c++ - JMS uri 问题

c++ - const 引用临时异常

C# - 以类型安全的方式将输入对象映射到效果对象