首页 > 解决方案 > C++17,制作一个使用依赖于模板参数的 std::variant 的可变参数模板?

问题描述

有没有办法在 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 *, ....>。其中提供的类型可能不一定共享一个公共基类。也就是说,每个提供给模板的类型都成为 std::variant 中的 const 指针。

我知道我可以直接手动将传递给模板的每个条目指定为必要的指针类型,我想知道是否有某种方法可以使用可变参数模板来使声明更容易输入,只使用Contains模板的基本类型的名称?

标签: c++c++17variadic-templatesvariant

解决方案


只需这样做:

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

推荐阅读