我有一个来自Gtk库的代表颜色(GdkColor)的类....我在它周围写了自己的间隔树...
基本上,它将不同的颜色关联到不同的间隔...
现在,在我的测试用例中,一旦我查询间隔,
我想将输出与预期值进行比较。
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库。
我还有其他方法可以解决这个问题吗?
最佳答案
如果,并且只有当您拥有确定相等性所需的所有信息时,自己定义函数就没问题了:
//not sure what GdkColor contains, but if it is large pass by const &
bool operator==(GdkColor a, GdkColor b) {
//check equality here
return result;
}
operator==
不必是成员函数。如果您无法比较两个GdkColor实例,则无法找出它们是否相等。死了很简单。如果框架没有提供允许您确定相等性的方法,则可能是有充分理由的。这通常是某种情况,既不提供
<,>,<=, >=, !=, ==
也不提供任何可比较的东西,并且根本无法访问定义平等关系的成员。我不记得要实现operator==
,在这种情况下。但是,如果必须强制API达到其极限以实现相等比较,则应调查为什么会这样。您将无权访问的典型情况是C库,该库使用
typedef
使struct
不透明。但是,如果打算让您操作该结构的内容或进行比较,则该框架将提供xxx getInformationXXX(struct S)
或方法int compare(struct S*, struct S*)
我对GdkColor不熟悉,但是我认为,有一些公开可用的信息可让您确定两个实例是否相等。您应该考虑将此函数放入一个命名空间,以防万一GdkColor本身实现了
operator==
来帮助避免歧义。