gpt4 book ai didi

c++ - 使用适当的基类指针声明设计接口(interface) - cpp

转载 作者:行者123 更新时间:2023-11-30 03:26:38 28 4
gpt4 key购买 nike

我有一个小设计问题。

假设我有这个界面:

class IBase {
public:
virtual void Run() = 0;
virtual void DoSomethingWithData(IData* data) = 0;
virtual ~IBase() = 0;
};

我想实现派生类,所以我需要为IData(我们称它为DData)建立一个派生类。 IData 基本上是一个空接口(interface):

class IData {
public:
IData();
virtual ~IData() = 0;
};

问题是在我实现的 DoSomethingWithData 方法中 - 我需要引用 DData 中的特定成员,但我不能,因为指针属于 IData 。例如,在一些派生类中查看 DoSomethingWithData 的实现:

class DData : public IData {
private:
int m_i;
};

<Derived.h : IBase>
Derived::DoSomethingWithData(IData* data) {
some_function_call(data->m_i) // cannot be used by the base ptr
}

克服这个问题的最佳方法是什么?

在 SetData 上动态转换?改变界面(以这种方式?)?其他选择?

编辑:

澄清问题:我有这个关系 -

class A -> uses DataA
class B -> uses DataB
class C -> uses DataC

这些类有一个通用接口(interface):Run、DoSomethingWithData。DoSomethingWithData 需要数据,但它不知道数据是什么,它取决于我们实现的类。我需要找到编写接口(interface)的最佳方法,而不使用像 dynamic_cast 这样糟糕的 OOP 技术。

最佳答案

I need to refer to specific members in DData, but I can't because the pointer is of IData

接口(interface)指定一个契约。它不“知道”内部细节/表示(也就是成员变量、私有(private)函数等)如果您的 IData 必须“知道”DData< 的私有(private)成员变量,你做错了什么。也许使用 Data 接口(interface)是错误的。如果 Data 是一个 POD(纯数据)结构,那么只需让您的基类采用 Data 并公开处理该结构的 API。

关于c++ - 使用适当的基类指针声明设计接口(interface) - cpp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48183516/

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