如何创建一个类模板来返回它的任何可变参数类型是否等于第一个类型。我希望能够做到这一点:
is_same<T, A, B, C>::value; // true if T is one of A, B or C
如果 T
等于其中任何一种类型,则其静态 value
成员将为 true
,否则为 false
。我该怎么做?
最佳答案
C++17 简洁明了:
template <class T, class... Ts>
struct is_any : std::disjunction<std::is_same<T, Ts>...> {};
还有对偶:
template <class T, class... Ts>
struct are_same : std::conjunction<std::is_same<T, Ts>...> {};
使用折叠表达式的变体:
template <class T, class... Ts>
struct is_any : std::bool_constant<(std::is_same_v<T, Ts> || ...)> {};
template <class T, class... Ts>
struct are_same : std::bool_constant<(std::is_same_v<T, Ts> && ...)> {};
关于c++ - 如何制作可变参数is_same?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17032310/