C ++ 17,制作一个使用std :: variant的可变参数模板,该模板依赖于模板参数?

时间:2019-10-28 20:59:32

标签: c++ c++17 variadic-templates variant

在C ++ 17中,有没有一种方法可以指定一个变体,使该变体中的每个条目都以某种重复的方式从可变参数模板中进行修改?

特别是,我想声明一个看起来像这样的模板,声明一个std::variant成员,例如:

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

例如,Contains<Type1, Type2, Type3,....>的{​​{1}}成员为choices。其中提供的类型不一定共享相同的基本类。也就是说,为模板提供的每种类型都将成为std :: variant中的const指针。

我知道我可以直接将传递给模板的每个条目直接指定为必要的指针类型,我想知道是否存在使用可变参量模板的方法,使仅使用基本类型的名称即可轻松地进行声明std::variant<const Type1 *, const Type2 *, const Type3 *, ....>模板?

2 个答案:

答案 0 :(得分:1)

只需:

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

答案 1 :(得分:0)

只需在choices类的Contains声明中提供与template <typename... Args> class Contains { std::variant<const Args*...> choices; }; } 修饰符相同的类型即可。

a