例如,将std::variant<T1, T2>
与T1
或T2
进行同等比较应该是非常有帮助的。到目前为止,我们只能与相同的变体类型进行比较。
这是标准委员会的任意决定。
好吧,不是很随意。重点是你有一个严格的比较尺度*,点数如下:
这些都是有效的选择。 C ++委员会根据各种外在标准做出决定。尝试查找std::variant
提案,或许它说明这些标准是什么。
(*) - 实际上是一个格子。
变体可以具有相同类型的多个副本。例如。 std::variant<int, int>
。
当且仅当它们持有相同的变体替代并且所述替代物的值相等时,std::variant
的给定实例与另一个实例进行比较。
因此,std::variant<int, int>
与index()
0相比不等于std::variant<int, int>
与index()
1,尽管活跃的变体替代品具有相同的类型和相同的值。
因此,标准没有实现通用的“与T
比较”。但是,您可以使用<variant>
标头中的其他辅助工具(例如std::holds_alternative
和std::get<T>
)自由设计比较运算符的重载。
我不能回答问题的部分原因,但是因为你认为将std::variant<T1, T2>
与T1
或T2
进行比较会很有用,或许这有助于:
template<typename T, class... Types>
inline bool operator==(const T& t, const std::variant<Types...>& v) {
const T* c = std::get_if<T>(&v);
if(c)
return *c == t;
else
return false;
}
template<typename T, class... Types>
inline bool operator==(const std::variant<Types...>& v, const T& t) {
return t == v;
}