代码之家  ›  专栏  ›  技术社区  ›  dani

检查模板类型T是否是C++17中可变参数包的一部分

  •  4
  • dani  · 技术社区  · 7 年前

    T Ts .有 solutions 这在C++14中可以实现,但我想知道这是否可以在C++17中简化 在中找不到

    template<typename... Ts>
    class A
    {
      template<typename T>
      void action() {
        // check that T is also in Ts (static_assertion)
      }
    }
    
    3 回复  |  直到 7 年前
        1
  •  6
  •   Barry    7 年前

    我听说褶皱表情是新的热点:

    static_assert((std::is_same_v<T, Ts> || ...));
    
        2
  •  5
  •   Columbo    7 年前

    如果您更喜欢库特征:

    static_assert(std::disjunction_v<std::is_same<T, Ts>...>);
    

    static_assert((std::is_same_v<T, Ts> || ...));
    

    (从@Barry那里偷来的。)

        3
  •  0
  •   SergeyA    7 年前

    template<typename... Ts>
    class A
    {
      template<typename T>
      void action() {
        static_assert((... || std::is_same_v<T, Ts>)), "Not!")
      }
    }