考虑以下虚拟继承层次结构
#include <string>
#include <iostream>
struct base
{
base() = default;
base( std::string const& s ) : s_(s) {}
std::string print() { return s_; }
private:
std::string s_;
};
struct derived : virtual base
{
derived( std::string const& s ) : base( "cool formatting: " + s ) {}
};
struct more_derived : virtual derived
{
more_derived( std::string const& s ) : derived( "even cooler formatting: " + s ) {}
};
int main()
{
std::cout << more_derived( "foo" ).print() << std::endl;
}
期望的输出:
cool formatting: even cooler formatting: foo
该代码不打印任何内容,因为more_derived
没有显式调用base
采用字符串的构造函数,因此base
调用了默认构造函数。此外,由于virtual
继承derived
的初始化base
被忽略。
如何在保持虚拟继承且不必显式调用每个基类构造函数的同时获得所需的输出?
编辑:
我意识到由于虚拟继承,使用构造函数调用继承层次结构是不可能的。我希望有人可以提供一种替代方法,在构建most_derived
.