模板参数包:如何创建具有相同长度的独立类型的元组

时间:2018-10-11 14:00:01

标签: c++ c++11 templates variadic-templates stdtuple

我的问题是关于参数包和相关的元组。如何创建与参数包大小相同但具有单个独立类型的元组?

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,当我解决问题时,事情就容易得多了:

我有一个由参数包表示的类型/对象列表。这将主元组定义为类成员。现在,我想将有关每种类型/对象的附加信息存储在附加元组中。 不要这样做。(几乎)总是可以用一个包含例如具有所有元素的结构,否则这些元素分布在多个元组中。

2 个答案:

答案 0 :(得分:6)

您需要挂接到参数包以启用扩展,然后将其忽略:

// ...

template <class T, class>
using hook = T;

std::tuple<hook<HelperData, T>...> m_helperData;

答案 1 :(得分:3)

是否需要std::tuplesomething else you can std::get可以工作?

std::array<HelperData, sizeof...(T)> m_helperData;