#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*>