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

Template Parameter Pack: How to create a Tuple of an independent type with same length

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

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

我有一个types/objects的列表,用参数包表示。这将主元组定义为 class 成员。现在我想要额外的信息,对于这些 types/objects 中的每一个,存储在一个额外的元组中。 不要那样做。这个结构可以(几乎)总是被单个元组替换,包含例如包含所有元素的结构,这些元素分布在多个元组中。

需要hook到参数包上才能开启扩展,那就忽略它:

// ...

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

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

是否需要 std::tuplesomething else you can std::get 有效?

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