我如何覆盖< 和> 在 C++/CLI 中?
我正在移植一个实现 IEquatable
和 IComparable
并覆盖 ==
、!=、
<
和 >
从 C# 转换为 C++/CLI。 到目前为止,我有:
标头:
virtual bool Equals(Thing other);
virtual int CompareTo(Thing other);
static bool operator == (Thing tc1, Thing tc2);
static bool operator != (Thing tc1, Thing tc2);
static bool operator > (Thing tc1, Thing tc2);
static bool operator < (Thing tc1, Thing tc2);
源文件:
bool Thing ::Equals(Thing other)
{
// tests equality here
}
int Thing ::CompareTo(Thing other)
{
if (this > other) // Error here
return 1;
else if (this < other)
return -1;
else
return 0;
}
bool Thing ::operator == (Thing t1, Thing t2)
{
return tc1.Equals(tc2);
}
bool Thing ::operator != (Thing t1, Thing t2)
{
return !tc1.Equals(tc2);
}
bool Thing::operator > (Thing t1, Thing t2)
{
// test for greater than
}
bool Thing::operator < (Thing t1, Thing t2)
{
// test for less than
}
我不确定为什么原始测试接口中的相等性并比较运算符中的内容,但我试图保留原始结构。
无论如何,我在标记行处收到编译错误:“错误 C2679:二进制 '>' : 找不到采用“ThingNamespace::Thing”类型的右侧操作数的运算符(或没有可接受的转换)
”,以及下面两行相应的错误。 为什么它没有发现重载运算符的存在?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
this
是一个指针,您需要取消引用它。this
is a pointer, you'll need to dereference it.正如阿鲁尔所说,您需要取消引用 this 关键字,但顺便说一句,您可能应该在函数参数中使用 const 引用而不是传递对象,因为:
-C++ 按值传递所有对象,而不是按引用传递(这就是发生在 C# 中),因此使用引用可以减少开销。
-它允许您使用标准库中的函数,例如 std::sort,而无需显式指定新的比较运算符
as arul said, you need to dereference the this keyword, but on a side note, you should probably use const references in your function paramaters instead of passing the object since:
-C++ passes all objects by value, not by reference(which is what happens in C#), so using references reduces the overhead.
-It'll let you use functions from the standard library such as std::sort without needing to explicitly specify a new comparison operator