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

phi*_*ipp 2 c++ templates variadic-templates c++11 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; //???
};
Run Code Online (Sandbox Code Playgroud)

回顾性评论:

这个问题可能在技术上有效并且有很好的答案.但是潜在的概念提出了越来越多的问题(如何一次迭代多个容器等).使用C++ 14或更新版本可能是正确的选择,但是,我发现使用C++ 11时,当我解决问题时,事情会变得非常容易:

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

Que*_*tin 6

您需要挂钩参数包以启用扩展,然后忽略它:

// ...

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

std::tuple<hook<HelperData, T>...> m_helperData;
Run Code Online (Sandbox Code Playgroud)

  • 或者`template <class>使用HelperData_t = HelperData;`然后`std :: tuple <HelperData_t <T> ...>`不那么抽象. (4认同)