C++初始化继承的模板基类

Cha*_*tas 1 c++ constructor

我试图在构造期间将仲裁参数传递给通过模板参数包继承的类.考虑这个例子:

struct Zero {
    Zero() {}
};

struct Two {
    Two(int, int) {}
};

template <class... Pack>
struct User : Pack... {
    template <class... Params>
    User(Params... p) : Pack(p)... {} // How to do this correctly?
};

auto test = User<Zero, Two>(1,2);
Run Code Online (Sandbox Code Playgroud)

如果我现在尝试构造一个类型的对象,User<Zero, Two> 我该如何将其传递Params给正确的构造函数?

最明显的解决办法是有一个元组构造以只有一个元组每种类型User可以接受,但是这需要我来修改ZeroTwo,这是我的使用情况非常困难.

这可能吗?也欢迎可能的解决方法.

Bri*_*ian 6

您需要让User构造函数接受一系列元组,然后将每个元组的参数转发到相应的基类.

template <class... Tuples>
User(Tuples&&... t) : Pack(std::make_from_tuple<Pack>(std::forward<Tuples>(t)))... {}
Run Code Online (Sandbox Code Playgroud)

请注意,由于保证复制Pack...省略,不会实例化类型的临时.

住在Coliru