C++ c++;运算符重载库类
我有一个来自Gtk库的类,它表示一种颜色(GdkColor)…我已经围绕它编写了自己的间隔树 基本上,它将不同的颜色关联到不同的间隔 现在,在我的测试用例中,一旦我查询了interval, 我想将输出与预期值进行比较C++ c++;运算符重载库类,c++,overloading,operator-keyword,C++,Overloading,Operator Keyword,我有一个来自Gtk库的类,它表示一种颜色(GdkColor)…我已经围绕它编写了自己的间隔树 基本上,它将不同的颜色关联到不同的间隔 现在,在我的测试用例中,一旦我查询了interval, 我想将输出与预期值进行比较 typedef struct { GdkColor color; }intervalMetaData; struct intervalInfo { signed int low; signed int high; intervalMetaDa
typedef struct
{
GdkColor color;
}intervalMetaData;
struct intervalInfo
{
signed int low;
signed int high;
intervalMetaData _data;
};
metaData = _intervalTree.performQuery(BWInterval);
GdkColor red;
//red==metaData.color //throws an error
我不能为gdkColor重载==因为它来自gdk库
我还有别的办法吗
operator==
不应该是该类的成员(并且可能不需要访问该类的私有/受保护部分),因此可以重载该类isEqualTo()
,没有任何重载如果且仅当您拥有确定等式所需的所有信息时,您可以自己定义函数:
//not sure what GdkColor contains, but if it is large pass by const &
bool operator==(GdkColor a, GdkColor b) {
//check equality here
return result;
}
运算符==
不必是成员函数
如果无法比较两个GdkColor实例,则无法确定它们是否相等。非常简单。如果框架没有提供允许您确定相等性的方法,那么它这样做可能有一个很好的理由。这通常是这样的,既不是,=,!===代码>或任何可比较的内容,并且根本无法访问定义平等关系的成员。我不记得我想实现一个操作符==
,就是这样。但是,如果必须强制API达到其极限以实现相等比较,则应调查原因
无法访问的典型情况是C库,它使用typedef
使struct
不透明。但是,如果您打算操纵结构的内容或比较它们,那么框架将提供
xxx获取信息xxx(结构S)
或方法int比较(结构S*,结构S*)
我不熟悉GdkColor,但我假设,有一些公开的信息可以让您确定两个实例是否相等。你应该考虑把这个函数放到命名空间中,以防万一GDKCULL一直执行<代码>运算符==/COD>本身来帮助消除歧义。我可以用这种方法工作……但是如果我不知道GDKCURE的内部结构呢?@巴萨夫如果你不知道内部的东西,你就无法比较它,对吧?你只能比较他们的地址。为什么不应该呢?2.如果类是final,或者如果它的成员/方法是private 3,那么它将是无用的,那么您不能这样做。这比标准==运算符好多少?