示例:
std::array<float, 3> vec;
我们可以。。。
vec = {1.1, 1.2, 1.3};
为什么我们不能同时做以下的比较呢?
vec == {1.1, 1.2, 1.3}
相反,我们似乎不得不。。。
vec == std::array<float, 3>({1.1, 1.2, 1.3})
或者类似的东西。
打字可以让我做一些事情,比如。。。
typedef std::array<float, 3> vector;
vec == vector({1.1, 1.2, 1.3})
但是有没有办法?
vec == {1.1, 1.2, 1.3}
我可以使operator==
过载以完成此操作吗?似乎编译器应该知道将{1.1, 1.2, 1.3}
解释为==
左侧的任何内容。它为=
做这件事。为什么不适用于==
?
如果没有别名,可以使用decltype
转换列表
vec == decltype(vec){{1.1, 1.2, 1.3}};
可以显式调用operator==
,但不能使用比较运算符隐式转换列表。
operator==(vec, {{1.1, 1.2, 1.3}});
我唯一能想到的其他选择是std::equal_to
,但它更丑陋:
std::equal_to<decltype(vec)>{}(vec, {{1.1, 1.2, 1.3}});
这个答案引用了一个标准,其中规定了initializer_list可以用于什么,运算符不在该列表中。