c++ - 如何从 C++ 模板中解压 std::tuple?
问题描述
我有一个预计将采用std::tuple
某些类型(允许任意计数)作为模板参数的类。我想声明一个类型的向量元组。例如,我有
template <typename T>
class MyClass {/*...*/}
我实例化它
MyClass<std::tuple<int, bool>> my_class;
我的目标是创建一个这样的领域
std::tuple<std::vector<int>, std::vector<bool>> my_tuple;
我知道如果我有一个类定义
template <typename... T>
class MyClass2 {/*...*/}
我可以通过传递没有元组的数据类型来实例化它
MyClass<int, bool> my_class2;
然后简单地创建字段
std::tuple<std::vector<int>, std::vector<bool>> my_tuple2;
使用
std::tuple<std::vector<T>...> my_tuple2;
因此,我在想我应该以某种方式从元组中解压缩数据类型。可能吗?
解决方案
当然,您只需要另一个级别的间接(像往常一样):
// this function declaration is used just for the type
// transformation, and needs no definition
template <typename... Types>
auto unpack(std::tuple<Types...>) -> std::tuple<std::vector<Types>...> ;
template <typename Tuple>
class MyClass
{
// use the return type of unpack
decltype(unpack(std::declval<Tuple>())) my_tuple;
};
现在您可以使用 实例化MyClass
,tuple
如下所示:
MyClass<std::tuple<int, double>> m;
其中包含一个my_tuple
类型的字段
std::tuple<std::vector<int>, std::vector<double>>
这是一个工作演示。
推荐阅读
- configure - 在 MobaXterm 上编译 Poly/ML:ar u 选项
- python - 如何使用 np.arange 获取一组值?
- elixir - 如何使 Plug.ErrorHandler 和其他 Plug 同时工作?
- java - 如何从 xsd 生成 Json 兼容的 POJO
- php - 创建每个数组项的路径
- firebase - 如何在 cloudbuild 中使用 firebase 持续部署?
- sql-server-2012 - 使用 SSMS“生成和发布脚本向导”生成的存储过程计数不同
- mysql - 将不同的计数查询分组到一个结果表中
- javascript - 吊装内部功能
- javascript - 当输入中的值发生变化时填充输入(角度)