簡體   English   中英

檢查模板類型T是否是C ++ 17中可變參數包的一部分

[英]Checking that a template type T is part of a variadic parameter pack in C++17

我想檢查類型T是否也是參數包Ts 有些解決方案可以在C ++ 14中實現,但如果在C ++中可以簡化這一點,我就會徘徊17。 如果T中沒有找到Ts編譯器應該停止(static_assertion應該失敗)。

template<typename... Ts>
class A
{
  template<typename T>
  void action() {
    // check that T is also in Ts (static_assertion)
  }
}

我聽說折疊表達是新的熱點:

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

如果您更喜歡圖書館特質:

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

請注意,這會導致短路(這里可能不是非常有益,但需要注意的事項)。 折疊表達同樣可行:

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

(從@Barry偷走。)

使用折疊表達式在C ++中足夠簡單:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM