Как расширить пакет параметров шаблона для серии шаблонных аргументов? - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть этот простой класс шаблона:

template<typename T>
class property
{
    // ...
};

и этот класс шаблона переменной:

template<typename... factory_args>
class type_t
{
    // …

, и в этом классе я хотел бы иметь конструктор, который расширяется до этого:

    type_t (property<first_type>&, property<second_type>& etc.)

, где first_type, second_type и т. Д. Должны исходить из factory_args.

Тогда я мог бы вызвать конструктор следующим образом:

property<int> first = etc...;
property<void*> second = ...;
auto some_type = type_t<int, void*>(first, second);

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

auto some_other_type = type_t(first, second);

Как мне написать конструктор type_t?Это выполнимо в C ++ 17?

1 Ответ

1 голос
/ 06 апреля 2019

Вроде так:

template<typename... factory_args>
class type_t
{
public:
    type_t(property<factory_args>&... args);
};

Класс шаблона Аргумент Дедукция тоже делает здесь правильные вещи. Так что, если у вас было:

property<int> i;
property<void*> v;
type_t x(i, v); // ok, x is a type_t<int, void*>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...