【问题标题】:C++17, making a variadic template that uses an std::variant that is dependant on template params?C++17,制作一个使用依赖于模板参数的 std::variant 的可变参数模板?
【发布时间】:2019-10-28 20:59:32
【问题描述】:

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

特别是,我想声明一个可能看起来像这样的模板,声明一个std::variant 成员,类似于:

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

例如,Contains&lt;Type1, Type2, Type3,....&gt;choices 成员将是std::variant&lt;const Type1 *, const Type2 *, const Type3 *, ....&gt;。其中提供的类型可能不一定共享一个公共基类。也就是说,每个提供给模板的类型都成为 std::variant 中的一个 const 指针。

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

【问题讨论】:

  • std::variant&lt;const Args*...&gt;

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


【解决方案1】:

简单地做:

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

【讨论】:

    【解决方案2】:

    只需为Contains 类中的choices 声明提供带有const 修饰符的相同类型。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 2017-10-10
      • 2014-04-16
      • 1970-01-01
      • 2012-04-14
      • 2023-01-24
      相关资源
      最近更新 更多