C++继承、成员和冗余数据
C++ inheritance, members and redundant data
我有两个类Foo和Bar,有多余的成员。 我想要一个第三类 FooBar 来保存两种类型的成员,我可以将其传递给期望任一类型的函数(可能带有强制转换(,而不是浮动所有内容的两个副本。
class Foo{
public:
A a;
B b;
C c;
};
class Bar{
A a;
B b;
D d;
};
class FooBar{
A a;
B b;
C c;
D d;
};
在 c++ 中,是否可以在不修改使用 A 或 B 的代码(或最多更改代码期望的类型(以及不制作无关副本或保留冗余数据的情况下执行此操作?简单继承保留重复数据。有一个公共基类和虚拟继承在 clang 下编译,但似乎不起作用。
编译器
无法知道Foo::a
和Bar::a
引用同一件事。这在你的程序中可能是逻辑上的,但这肯定不会在代码的任何地方强制执行。
如果它们真的意味着同样的事情,你可能想要有一个共同的基础:
class AB {
public:
A a;
B b;
};
并在其他任何地方使用虚拟继承:
class Foo : public virtual AB {
public:
C c;
};
class Bar : public virtual AB {
public:
D d;
};
class FooBar : public Foo, public Bar {
};
这样,只有一个FooBar::a
.
相关文章:
- 如何擦除冗余输入?
- 使用提升几何缓冲区缩放多边形时的冗余折点
- 我应该担心冗余声明吗?
- Qt的slot(?)将冗余命名空间插入连接
- 方法冗余移动调用的移动语义
- 使用 llvm 和本地值编号算法擦除冗余表达式
- 优化堆上创建的冗余变量
- 如何消除访客模式冗余?
- 表达式模板需要冗余重载
- C++,处理多个构造函数重载和冗余代码
- 使用模板基类消除工厂类派生类冗余的干净方法
- 连接两个文件时如何避免冗余尾随换行符?
- CMake:修改共享库时的冗余链接
- 提升精神 X3:"属性没有预期的大小"冗余
- 如何简化此冗余C++代码?
- 是``if`语句''在modulo之前和分配操作之前的冗余
- 使用最终类说明符时,最终函数说明符是否冗余?
- 冗余静态数据
- C++继承、成员和冗余数据
- 对高度冗余的数据使用什么压缩算法