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

C++17, making a variadic template that uses an std::variant that is dependant on template params?

在 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 *, ....>。其中提供的类型不一定共享一个公共基础 class。也就是说,每个提供给模板的类型都成为 std::variant.

中的一个 const 指针

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

只需执行:

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

只需为 Contains class.

中的 choices 声明提供带有 const 修饰符的相同类型
template <typename... Args>
class Contains
  {
    std::variant<const Args*...> choices;
  };
}