C ++ 17, создание шаблона с переменным числом аргументов, использующего std :: option, который зависит от параметров шаблона? - PullRequest
1 голос
/ 28 октября 2019

Есть ли способ, в C ++ 17, указать вариант, в котором каждая запись в варианте каким-либо образом изменялась из шаблона с переменными параметрами?

В частности, я хочу объявитьшаблон, который может выглядеть примерно так, объявляя элемент std::variant, что-то вроде:

template<typename... Args> class Contains {
      ...
    std::variant<...> choices;
      ...
}

Такой, что, например, Contains<Type1, Type2, Type3,....> будет иметь choices член std::variant<const Type1 *, const Type2 *, const Type3 *, ....>. где поставляемые типы не обязательно имеют общий базовый класс. То есть каждый предоставленный тип в шаблон становится указателем const в std :: варианте.

Я знаю, что потенциально мог бы вручную указать каждую запись, передаваемую в шаблон, как необходимый тип указателя напрямую, мне интересноесли есть какой-то способ использования шаблонов с переменными значениями, чтобы упростить ввод объявления, используя только имена базовых типов для шаблона Contains?

Ответы [ 2 ]

1 голос
/ 29 октября 2019

Просто сделайте:

template <typename... Args>
class Contains
{
    std::variant<const Args*...> choices;
};
0 голосов
/ 29 октября 2019

Просто укажите тот же тип с модификатором const для вашей декларации choices в классе Contains.

template <typename... Args>
class Contains
  {
    std::variant<const Args*...> choices;
  };
}
...