如何在虚拟继承下游使用参数化基 class 构造函数
How to use parameterized base class constructor downstream of virtual inheritance
我的 class 结构如下所示:
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 应该是库的一部分,class D 是任何 class 的基础 class es我以后再做(比如E)。 D 的唯一目的是简化像 E 这样的 class 的继承。我的问题是 E 的构造函数调用 A 的默认构造函数,除非我显式调用 A 的参数化构造函数,这违背了 D.
这种继承结构最适合我的应用程序,因为 classes C 和 D 用于专门化由 A 和 B 创建的基础结构。C 包含 A 的附加方法。
有没有办法让 D 处理对 A 的参数化构造函数的调用?理想情况下,我希望 E 的初始化按顺序调用构造函数 A、B、C、D、E。字符串参数对O上游的classes非常重要,构造函数B和C需要运行具体函数
没有。虚拟基础 classes 必须始终 由最派生的 class 构建。它不能以任何其他方式工作。您所能做的就是不允许 A 默认可构造并让编译器帮助您解决问题,或者重构您的代码以首先不使用菱形继承。
我的 class 结构如下所示:
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 应该是库的一部分,class D 是任何 class 的基础 class es我以后再做(比如E)。 D 的唯一目的是简化像 E 这样的 class 的继承。我的问题是 E 的构造函数调用 A 的默认构造函数,除非我显式调用 A 的参数化构造函数,这违背了 D.
这种继承结构最适合我的应用程序,因为 classes C 和 D 用于专门化由 A 和 B 创建的基础结构。C 包含 A 的附加方法。
有没有办法让 D 处理对 A 的参数化构造函数的调用?理想情况下,我希望 E 的初始化按顺序调用构造函数 A、B、C、D、E。字符串参数对O上游的classes非常重要,构造函数B和C需要运行具体函数
没有。虚拟基础 classes 必须始终 由最派生的 class 构建。它不能以任何其他方式工作。您所能做的就是不允许 A 默认可构造并让编译器帮助您解决问题,或者重构您的代码以首先不使用菱形继承。