c++ 运算符重载库 class
c++ operator overloading library class
我有一个来自 Gtk 库的 class 代表一种颜色 (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 库。
有没有其他方法可以解决这个问题?
operator==
不应该是 class 的成员(并且可能不需要访问其中的 private/protected 部分),所以它可以过载。
您可以创建派生的 class 并在其中重载您想要的任何内容。
最简单的就是一个辅助函数,有点像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;
}
operator==
不必是成员函数。
如果您无法比较两个 GdkColor 实例,则无法确定它们是否相等。死的简单。如果框架没有提供允许您确定相等性的方法,那么它这样做可能是有充分理由的。这通常是这样的,既不提供 <,>,<=, >=, !=, ==
也不提供任何可比较的东西,并且根本不可能访问定义相等关系的成员。我不记得在这种情况下想要实现 operator==
。但是,如果您必须将 API 强制到其限制以实现相等比较,您应该调查为什么会这样。
您无法访问的典型情况是 C 库,它使用 typedef
使 struct
不透明。但是,如果您打算操纵结构的内容或比较它们,则框架会提供类似
的内容
xxx getInformationXXX(struct S)
或方法 int compare(struct S*, struct S*)
我不熟悉 GdkColor,但我想,有一些公开可用的信息可以让您确定两个实例是否相等。您应该考虑将此函数放入命名空间,以防万一 GdkColor 实现 operator==
本身以帮助避免歧义。
我有一个来自 Gtk 库的 class 代表一种颜色 (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 库。
有没有其他方法可以解决这个问题?
operator==
不应该是 class 的成员(并且可能不需要访问其中的 private/protected 部分),所以它可以过载。您可以创建派生的 class 并在其中重载您想要的任何内容。
最简单的就是一个辅助函数,有点像
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;
}
operator==
不必是成员函数。
如果您无法比较两个 GdkColor 实例,则无法确定它们是否相等。死的简单。如果框架没有提供允许您确定相等性的方法,那么它这样做可能是有充分理由的。这通常是这样的,既不提供 <,>,<=, >=, !=, ==
也不提供任何可比较的东西,并且根本不可能访问定义相等关系的成员。我不记得在这种情况下想要实现 operator==
。但是,如果您必须将 API 强制到其限制以实现相等比较,您应该调查为什么会这样。
您无法访问的典型情况是 C 库,它使用 typedef
使 struct
不透明。但是,如果您打算操纵结构的内容或比较它们,则框架会提供类似
xxx getInformationXXX(struct S)
或方法 int compare(struct S*, struct S*)
我不熟悉 GdkColor,但我想,有一些公开可用的信息可以让您确定两个实例是否相等。您应该考虑将此函数放入命名空间,以防万一 GdkColor 实现 operator==
本身以帮助避免歧义。