如何更改`valarray`的默认`operator ==`?

时间:2015-06-29 21:49:09

标签: c++ stl

我可以为==创建自己的valarray<double>重载吗?我不喜欢x==yvalarray s xy)返回valarray<bool>的默认行为。如果booltrue具有相同的值,我希望它返回单个xy

我是否可以为operator==覆盖valarray<double>的默认重载。

1 个答案:

答案 0 :(得分:7)

不确定。你不能覆盖默认的&#34;,但是你可以提供你自己的优先级更高的重载:

#include <iostream>
#include <valarray>

bool operator==(const std::valarray<double>& a, const std::valarray<double>& b)
{
    std::cout << "hi\n";
    return true;
}

int main(int argc, char *argv[])
{
    std::valarray<double> a, b;
    a == b; // prints hi
}

由于operator==是非成员函数模板,因此在重载解析中不会使用不是模板的函数。关键是要确保在比较valarray的所有位置时,不合格的查找会发现此过载。

当然,写起来要安全得多:

bool equals(const std::valarray<double>&, const std::valarray<double>&);