将可变模板参数解包到可变继承类中

问题描述 投票:0回答:0

我有简单的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
的参数数量相同)时,它工作得很好。

c++ c++17 variadic-templates crtp
© www.soinside.com 2019 - 2024. All rights reserved.