Пакет параметров шаблона: Как создать кортеж независимого типа одинаковой длины - PullRequest
0 голосов
/ 11 октября 2018

Мой вопрос касается пакетов параметров и связанных кортежей.Как мне создать кортеж того же размера, что и пакет параметров, но с одним независимым типом?

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 голосов
/ 11 октября 2018

Это должно быть std::tuple или что-то еще, что вы можете std::get работать?

std::array<HelperData, sizeof...(T)> m_helperData;
0 голосов
/ 11 октября 2018

Вам нужно подключить пакет параметров, чтобы включить расширение, а затем проигнорировать его:

// ...

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

std::tuple<hook<HelperData, T>...> m_helperData;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...