我的问题是关于参数包和相关的元组。如何创建与参数包大小相同但具有单个独立类型的元组?
template <class... T>
class Thing {
public:
// some struct that was found helpful for any Type used as parameter
struct HelperData{
int a;
int b;
};
[...]
private:
// the tuple used as normally, my initial reason to use parameter pack
std::tuple<T...> m_tuple;
// now I want a tuple of N values of type HelperData, where N is sizeof...(T)
std::tuple<HelperData...sizeof...(T)> m_helperData; //???
};
回顾性评论:
这个问题在技术上可能是有效的,并且有很好的答案。但是基本概念提出了越来越多的问题(如何一次迭代多个容器,等等)。使用C ++ 14或更高版本可能是正确的事情,但是,我刚刚发现,使用C ++ 11,当我解决问题时,事情就容易得多了:
我有一个由参数包表示的类型/对象列表。这将主元组定义为类成员。现在,我想将有关每种类型/对象的附加信息存储在附加元组中。 不要这样做。(几乎)总是可以用一个包含例如具有所有元素的结构,否则这些元素分布在多个元组中。
答案 0 :(得分:6)
您需要挂接到参数包以启用扩展,然后将其忽略:
// ...
template <class T, class>
using hook = T;
std::tuple<hook<HelperData, T>...> m_helperData;
答案 1 :(得分:3)
是否需要std::tuple
或something else you can std::get
可以工作?
std::array<HelperData, sizeof...(T)> m_helperData;