【发布时间】:2021-04-13 10:57:37
【问题描述】:
在我的程序中,我使用了许多arma::uvecs,并像这样检查它们之间的相等性
#include <armadillo>
using Vec = typename arma::uvec;
Vec v1({0, 0});
Vec v2({0, 1});
bool are_equal = arma::all(v1 == v2);
因为我找不到更好的相等运算符in the Armadillo docs。现在效果很好,但是为了节省一些空间,并且作为子类化和运算符重载的练习,我想在向量之间定义等号 直接,如下所示:
class Vec : public arma::uvec {
friend bool operator==(const Collapsed& lhs, const Collapsed& rhs) {
return arma::all(lhs == rhs);
}
};
但遗憾的是,我无法让它像那样工作。我很感激任何提示!
【问题讨论】:
-
你的实现会很好我认为如果你不把它放在一个子类中,而是作为一个全局函数。在我看来,您误解了
friend的作用。 -
谢谢!事实是:我完全不明白
friend做了什么。没有它就行不通,然后我得到一个朋友的提示,要在friend前面加上(不是双关语)。 -
啊,好吧,
friend不是用来实现功能的。我在答案中放了一些链接
标签: c++ operator-overloading armadillo subclassing