定义多个派生接口成员
Defining multiple derived Interface Members
我希望你能帮助我解决以下问题。我正在尝试创建一个灵活的接口系统并遇到了问题。这是相关代码:
// Interface 1
// this: virtual f_a
// -> abstract
struct I_A abstract
{
virtual void f_a() = 0;
};
// Interface 2
// I_A : virtual f_a
// this: virtual f_b
// -> abstract
struct I_B abstract : public I_A
{
virtual void f_b() = 0;
};
// Implementation 1
// I_A : virtual f_a
// zhis: defines f_a
// -> not abstract
struct S_A : public I_A
{
virtual void f_a() {}
};
// Implementation 2
// I_B : virtual f_a
// I_B : virtual f_b
// S_A : defines f_a
// this: defines f_b
// -> not abstract
struct S_B : public I_B, public S_A
{
virtual void f_b() {}
};
我无法实例化S_B因为编译器声明它是抽象的。怎么了?
您需要在此处使用虚拟继承:
struct I_A
{
virtual void f_a() = 0;
};
struct I_B : virtual public I_A
{
virtual void f_b() = 0;
};
struct S_A : virtual public I_A
{
virtual void f_a() {}
};
注意1:我忽略了类声明中的abstract
语句,因为它不是标准C++。
注2:这里有一个副本,您可以在其中找到有关为什么会发生这种情况的解释。
相关文章:
- 内联如何影响模块接口中的成员函数
- 访问使用接口实例化的类的私有成员
- 这是重载提供与非静态成员函数相同接口的静态成员函数的优雅方法吗?
- 具有依赖于实现的成员函数类型的多个静态接口
- C++:将成员容器的迭代器接口转发到类接口
- C 模板成员函数作为另一个模板类的接口
- 运算符=不是DLL中导出的C++__接口的成员
- 与模板成员函数的接口
- 定义多个派生接口成员
- 当使用来自c的回调接口时,避免在c++中使用静态成员函数
- 编译器无法识别实现文件中的类成员函数类型,但在接口文件中已识别
- 使用成员函数模板实现接口的功能
- 组织专用成员 Vector<Vector 接口的最佳方式<Type>>
- 如何通过接口存储成员函数指针
- 为什么接口成员不能使用私有类类型
- 存储抽象成员,保持接口简单
- 为什么在接口中定义私有成员/方法?
- 如何通过接口从另一个类访问公共成员变量
- 导出DLL接口中包含相同类的STL类成员
- C++接口错误,非静态成员引用必须相对于特定对象