伙计们,我有一些愚蠢的结构,我们称它为X,我还有一个fnc (不是它的成员)返回一个指向这个结构的指针,所以它看起来是这样的:
struct X
{
bool operator==(const X* right)
{
//...
}
};
X* get(X* another)
{
//...
}我在代码中也有一行代码“尝试”比较指向这些结构的指针,但真正的目的是比较那些指向的结构:
if (get(a) == get(b))//here obviously I have two pointers returned to be compared
{
//...
}我还定义了X operator==(const X* right)的成员,它应该在上面提到的情况下工作,但我不明白它不能工作。如何让它工作(我不能改变行if (get(a) == get(b)),而且get必须返回指针)。
发布于 2011-07-29 19:25:10
您不能更改比较指针的方式。您必须更改if语句的语法,或者更改get()以返回引用而不是指针。任何其他的解决方案都将是相当老套的。
如果你真的必须接受这些限制,我建议你改变get(),返回某种特殊的智能指针,用重载的operator ->()和重载的operator ==()封装你想要的这种不一致的行为。我发誓,这真的是在自找麻烦,我认为您最好还是与任何不允许您更改if()语句的力量作斗争。
发布于 2011-07-29 19:26:25
这是行不通的:您的类型是指针,您不能重载内置类型的运算符。因此,首先,通过取消引用进行比较:
T * a, * b;
if (*a == *b) { ... }接下来,要实现这一点,必须实现T的运算符:
struct T {
bool operator==(const T & other) const { ... }
/* ... */
};请注意,运算符应该是const,并通过const引用获取右侧参数!
参考你的最后一句话:如果你不能改变get(a) == get(b) 和,你也不能改变get的类型,那么你就只能比较指针了。
发布于 2011-07-29 19:26:50
如果您不能更改行get(a) == get(b),也不能更改get(),那么您尝试实现的目标是不可能实现的。
只有在至少有一个操作数属于用户定义类型(或对用户定义类型的引用)的情况下,才能定义重载运算符。指向类的指针不符合这个要求,所以你不能定义一个运算符,这个运算符将在比较两个指针的地方调用。
https://stackoverflow.com/questions/6872347
复制相似问题