我有一个来自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==来帮助避免歧义。

10-04 14:18