我试图在构造期间将仲裁参数传递给通过模板参数包继承的类.考虑这个例子:
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可以接受,但是这需要我来修改Zero和Two,这是我的使用情况非常困难.
这可能吗?也欢迎可能的解决方法.
您需要让User构造函数接受一系列元组,然后将每个元组的参数转发到相应的基类.
template <class... Tuples>
User(Tuples&&... t) : Pack(std::make_from_tuple<Pack>(std::forward<Tuples>(t)))... {}
Run Code Online (Sandbox Code Playgroud)
请注意,由于保证复制Pack...省略,不会实例化类型的临时.
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |