如何制作一个类模板来返回其任何可变参数类型是否等于第一种类型。我希望能够做到这一点:
is_same<T, A, B, C>::value; // true if T is one of A, B or C
And if 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++20 概念:
template <typename T, typename... Ts>
concept is_any = std::disjunction_v<std::is_same<T, Ts>...>;
template <typename T, typename... Ts>
concept are_same = std::conjunction_v<std::is_same<T, Ts>...>;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)