- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个小设计问题。
假设我有这个界面:
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/
这段代码在 Java 中的等价物是什么?我放了一部分,我对 I/O 部分感兴趣: int fd = open(FILE_NAME, O_WRONLY); int ret = 0; if (fd =
我正在尝试将维度为 d1,d2,d3 的张量 M[a1,a2,a3] reshape 为维度为 d2, d1*d3 的矩阵 M[a2,a1*a3]。我试过 M.reshape(d2,d1*d3) 但是
我是一名优秀的程序员,十分优秀!