gpt4 book ai didi

c++ - 替代类型转换基类保护方法的返回指针?

转载 作者:搜寻专家 更新时间:2023-10-31 02:22:00 25 4
gpt4 key购买 nike

我提出了一个使用 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* 指向一个 derivedData,所以 static_cast 绝对是安全的。

就是说,当其他一切看起来都非常合理时,我应该从基础转换为派生感觉有点不对劲。
有没有更好/正确的方法来做到这一点,而不使用类型转换?还是我必须重新设计我的类/结构?

最佳答案

这是因为编译器不确定 processSomeData 使用 allocateSomeData 来创建 someData 结构。就编译器所知的 someData 而言,从 processSomeData 返回的可能只是 someData 的一个实例。 derivedData 是 someData 但不是相反。

关于c++ - 替代类型转换基类保护方法的返回指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30822642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com