【发布时间】:2019-08-24 15:50:57
【问题描述】:
我有一些变体using V = std::variant<A, B, C> 和一些函数foo,原型void foo(const T&)。
如果V 的其中一种类型被传递(没有明确指出),则希望我的函数foo 成为std::enable_ifed。
我的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&);
不可接受。
Here 是一种升压解决方案。
是否可以实现std::variant的逻辑?
理想情况下,类型特征应该类似于is_one_of_variants_types<V, T>。
【问题讨论】:
-
变体可以是任何类型;如果变体实际上不是有效的替代方案, foo 会做什么?
-
@Yakk-AdamNevraumont,
foo采用一些变体的类型,而不是变体本身。 (这些类型的变体本身可能是变体,但这不应该影响解决方案。)
标签: c++ c++17 template-meta-programming typetraits variant