我有简单的3个类,其中两个实际上是继承的:
struct A
{
};
struct B : virtual A
{
B(int, int) { }
};
struct C : virtual A
{
C(int) { }
};
现在我想要一个继承多个类并通过构造函数参数初始化它们的类:
template<typename... Ts>
struct D : public Ts...
{
template<typename... Args>
D(Args... args) : A{ }, Ts{ args }...
{
}
};
尝试使用它:
D<B, C>{1, 2, 3};
由于错误而无法编译:
Ts the number of elements in this pack expansion does not match the number of elements in args
.
B no appropriate default constructor available
C no appropriate default constructor available
通常,当类
B
的构造函数仅采用单个参数(与类C
的参数数量相同)时,它工作得很好。