[英]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.