首页 > 解决方案 > C++初始化继承的模板基类

问题描述

我试图在构造过程中将任意参数传递给通过模板参数包继承的类。考虑这个例子:

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);

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

最明显的解决方法是让一个元组构造函数为每种类型都接受一个元组User可以接受,但这需要我修改Zeroand Two,这在我的用例中非常困难。

这可能吗?也欢迎其他可能的解决方法。

标签: c++constructor

解决方案


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

template <class... Tuples>
User(Tuples&&... t) : Pack(std::make_from_tuple<Pack>(std::forward<Tuples>(t)))... {}

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

住在科利鲁


推荐阅读