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

问题描述 投票:1回答:2

在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++17 variadic-templates variant
2个回答
1
投票

简单地做:

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

0
投票

只需在const类的choices声明中提供与Contains修饰符相同的类型。

template <typename... Args>
class Contains
  {
    std::variant<const Args*...> choices;
  };
}
© www.soinside.com 2019 - 2024. All rights reserved.