Nes*_*tor 2 c++ variant type-traits template-meta-programming c++17
我的原型有一些变体using V = std::variant<A, B, C>和功能。foovoid foo(const T&)
并希望我的函数在传递的类型之一时foo进行std::enable_if编辑V(而无需明确指示它们)。
我V将及时得到越来越多的类型,因此
template<class T,
typename std::enable_if<
std::is_same_v<T, A> || std::is_same_v<T, B> || std::is_same_v<T, C>,
int>::type = 0>
void foo(const T&);
Run Code Online (Sandbox Code Playgroud)
是不能接受的。
这是一个增强的解决方案。
是否可以实现的逻辑std::variant?
理想情况下,类型特征应看起来像is_one_of_variants_types<V, T>。
template <typename, typename>
constexpr bool is_one_of_variants_types = false;
template <typename... Ts, typename T>
constexpr bool is_one_of_variants_types<std::variant<Ts...>, T>
= (std::is_same_v<T, Ts> || ...);
template <typename T>
auto foo(const T&)
-> std::enable_if_t<is_one_of_variants_types<V, T>>;
Run Code Online (Sandbox Code Playgroud)