下面的代碼說明我的問題:使用虛擬繼承時可以避免冗餘基類初始化嗎?
struct Base {
Base(int n) : n(n) {}
virtual ~Base() = 0;
int n;
};
Base::~Base() {}
struct A : public virtual Base {
A(int n) : Base(n) {}
virtual ~A() = 0;
};
A::~A() {}
struct B : public virtual Base {
B(int n) : Base(n) {}
virtual ~B() = 0;
};
B::~B() {}
struct Test : public virtual A, public virtual B {
Test(int n) : Base(n), A(n), B(n) {} // how to avoid this duplication?
};
int main() {
Test c(0);
(void)c;
}
正如你所看到的,Test
構造函數必須初始化Base
,A
和B
明確。這是正常的嗎?還是有辦法避免冗餘?
你的用例是什麼? – 2012-02-21 13:24:06
實驗。 – StackedCrooked 2012-02-21 13:56:07