c++ - 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
可以接受,但这需要我修改Zero
and Two
,这在我的用例中非常困难。
这可能吗?也欢迎其他可能的解决方法。
解决方案
您需要让User
构造函数接受一系列元组,然后将参数从每个单独的元组转发到相应的基类。
template <class... Tuples>
User(Tuples&&... t) : Pack(std::make_from_tuple<Pack>(std::forward<Tuples>(t)))... {}
请注意,由于保证复制省略,类型的临时对象Pack...
将不会被实例化。
推荐阅读
- osgearth - 如何用 OsgEarth2.10 构建 OsgEarthQt?
- excel - Excel Power Query DataSource.Error:基础连接已关闭:接收时出现意外错误
- excel - VBA如何将列值设置为在某个范围内结束
- mysql - MySQL 是否有 13 位时间戳列类型?
- html - 如何在普通 HTML 中使用对象标签嵌入角度站点?
- visual-studio-code - 我可以在没有扩展名的情况下在 Visual Studio Code 中缩进代码吗?
- dataflow - 什么是“数据流作业似乎被卡住了,因为在过去 1 小时内没有看到任何工作人员活动”?
- pandas - 此时我似乎无法安装任何东西
- android - 如何从 Unity 创建前台服务
- php - 如何在不使用 phpWord 或任何其他包的情况下仅使用核心 php 获取仅写入文档(.doc、.docx、.pdf)中的内容