有没有一种方法可以使用std::array与文字或初始值设定项列表进行比较,就像使用赋值一样



示例:

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可以用于什么,运算符不在该列表中。

最新更新