как расширить пакет параметров шаблона до серии шаблонных аргументов?

#c #templates #c 17

#c #шаблоны #c 17

Вопрос:

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

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

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

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

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

     type_t (property<first_type>amp;, property<second_type>amp; 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. type_t(property<factory_args> amp;... args) ? Или вы хотите несколько именованных аргументов?

Ответ №1:

Вот так:

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

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

 property<int> i;
property<void*> v;
type_t x(i, v); // ok, x is a type_t<int, void*>