在c ++中重载不同类型的比较运算符

use*_*200 6 c++ operator-overloading comparison-operators

我需要能够将我的一个类(其中包含多于一个整数)与整数进行比较,即使这可能会延伸到相等的一点,但它足够接近......

如何为不同类型重载相等运算符?

我基本上有这样一个班级

struct MyClass {
    int start;
    int middle;
    int threequarters;
};
Run Code Online (Sandbox Code Playgroud)

和重载的运算符

inline bool operator==(const MyClass& lhs, const MyClass& rhs) {
    return lhs.middle == rhs.middle;
}
Run Code Online (Sandbox Code Playgroud)

所以,当我有需要比较靠中间变量以及整数比较,但我不知道我是否需要两套操作功能,其中一个整数LHS和一个地方的整数是RHS?

inline bool operator==(const int& lhs, const MyClass& rhs) {
    return lhs == rhs.middle;
}

inline bool operator==(const MyClass& lhs, const int& rhs) {
    return lhs.middle == rhs;
}
Run Code Online (Sandbox Code Playgroud)

qea*_*adz 6

为了澄清我的评论,这将支持代码,因此您可以提供运算符的所有变体:

inline bool operator==(const MyClass& lhs, const MyClass& rhs) {
return lhs.middle == rhs.middle;
}

inline bool operator==(const int& lhs, const MyClass& rhs) {
return lhs == rhs.middle;
}

inline bool operator==(const MyClass& lhs, const int& rhs) {
return lhs.middle == rhs;
}
Run Code Online (Sandbox Code Playgroud)

并为每个操作员执行此操作(这会导致大量代码)。或者,如果有意义,您可以提供一个从 int 构造的构造函数:

struct MyClass {
MyClass() {} // default
MyClass( int x ) { /* init for an int here */ }
int start;
int middle;
int threequarters;
};
Run Code Online (Sandbox Code Playgroud)

如果您这样做,那么您将只需要每个运算符的 MyClass,MyClass 版本:

inline bool operator==(const MyClass& lhs, const MyClass& rhs) {
return lhs.middle == rhs.middle;
}
Run Code Online (Sandbox Code Playgroud)

因为当编译器看到:

if ( 5 == my_class ) {}
Run Code Online (Sandbox Code Playgroud)

它实际上是这样做的:

if ( MyClass(5).operator==( my_class ) ) {}
Run Code Online (Sandbox Code Playgroud)