如何在虚拟继承的下游使用参数化基类构造函数
How to use parameterized base class constructor downstream of virtual inheritance
我有一个类结构,如下所示:
O
|
A
/
B C
/
D
|
E
构造函数的工作方式如下(为了简洁起见,没有包含特定的代码,但如果需要,我可以进一步充实它):
class O {
protected:
O(const string &str) {
//Does stuff with str
};
}
class A : public O {
protected:
A(const string &str) : O(str) { };
}
class B : public virtual A {
protected:
B(const string &str) : A(str) { };
}
class C : public virtual A {
protected:
C(const string &str) : A(str) { };
}
class D : public B, public C {
protected:
D(const string &str) : B(str), C(str) { };
}
class E : public D {
public:
E(const string &str) : D(str) { };
}
类O、A、B、C和D应该是库的一部分,类D是我稍后创建的任何类(如E)的基类。D的唯一目的是简化像E这样的类的继承。我的问题是,除非我显式调用A的参数化构造函数,否则E的构造函数会调用A的默认构造函数,这违背了D的目的。
这种继承结构最适合我的应用程序,因为类C&D被用来专门化由A&B.C包含A.的其他方法
有没有一种方法可以让D处理对a的参数化构造函数的调用?理想情况下,我希望E的初始化按顺序调用构造函数A、B、C、D、E。字符串参数对于O上游的类非常重要,构造函数B和C需要运行特定的函数。
否。虚拟基类必须始终由最派生的类构造。它不能以任何其他方式工作。你所能做的就是不允许A是默认的可构造的,并让编译器帮助你,或者重构你的代码,让它一开始就不使用菱形继承。
相关文章:
- C++:使用运算符 = 调用多参数构造函数
- 通过零参数构造函数创建的 glm::mat4 应该包含哪些值?
- 好奇的混合与可变参数构造函数
- 具有默认值的单个参数构造函数是否与默认构造函数相同?
- 为什么我们需要创建一个单参数构造函数来使用临时的无名称对象
- 在可变参数构造函数中初始化常量数组
- C++ 显式多参数构造函数歧义
- 零一参数构造函数
- 可变参数构造函数中的 SFINAE
- 当没有显式关键字与单参数构造函数一起使用时,编译器可以发出警告
- 可变参数类模板和可变参数构造函数
- 确保模板参数类型与其可变参数构造函数的类型匹配
- C++默认参数构造函数与内联初始化优先级
- 如何在 c++ 中将包含复制构造函数的类的参数构造函数称为私有?
- 自动存储中没有无参数构造函数的类对象和异常
- 警告:用两个参数构造函数返回对象时,表达结果未使用
- 如何在C++中调用无参数构造函数
- 在 c++ 中具有多个参数构造函数的模板类存在问题
- 可变参数构造函数优先于用户提供的移动构造函数,除非默认
- 如何从可变参数构造函数参数构造任何对象?