Преобразовать типы пакетов параметров - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть несколько классов, которые используют одни и те же общедоступные определения типа, как

struct A { using Container = std::array<A, 3>; };
struct B { using Container = std::vector<B>; };
struct C { using Container = std::array<C, 5>; };

Теперь у меня есть класс, который получает пакет параметров, содержащий только допустимые классы, но он должен хранить кортеж контейнеров. Псевдо-код:

template <typename... Modules>
struct Collector
{
std::tuple<Modules...::Container> mContainers;
};

Есть ли элегантный способ применения ::Container во время распаковки?

1 Ответ

0 голосов
/ 19 ноября 2018

Вы можете использовать черту помощника

template<typename T>
using ContainerOf = typename T::Container;

template <typename... Modules>
struct Collector
{
std::tuple<ContainerOf<Modules>...> mContainers;
};

в качестве альтернативы, вы также можете использовать эту черту без вспомогательной черты:

template <typename... Modules>
struct Collector
{
std::tuple<typename Modules::Container...> mContainers;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...