我想知道我是否可以将 2 个成员函数与“<”运算符进行比较。我可以做“==”,但我不能在下面的情况下使用它。我尝试将它们转换为 void*,但这也不起作用。
template <class Receiver, class Sender>
class CallBack2 : public ICallBack2 {
protected:
Receiver* receiver;
void(Receiver::*function)(Sender*);
Sender* sender;
public:
CallBack2(Receiver* _receiver, void(Receiver::*_function)(Sender*), Sender* _sender) : receiver(_receiver), function(_function), sender(_sender) {};
virtual ~CallBack2() {};
virtual void callBack() {
(receiver->*function)(sender);
}
virtual bool operator<(const ICallBack2* _other) const {
CallBack2<Receiver, Sender>* other = (CallBack2<Receiver, Sender>*)_other;
if (receiver < other->receiver) {
return true;
} else if (receiver == other->receiver && function < other->function) {
return true; // this line gives the error
}
return false;
}
};
有什么想法吗?
最佳答案
C++03 § 5.9 ,它涵盖了内置 <、>、<= 和 >= 的语义,没有提到指向成员和状态的指针:
Other pointer comparisons are unspecified.
根据 § 8.3.3 , 3
The type "pointer to member" is distinct from the type "pointer",
因此,我们可以得出结论,将关系运算符应用于指向成员(无论是函数还是字段)的指针的结果是未指定的。
请注意,“未指定行为”不同于“未定义行为”,但仍然意味着您无法有效地应用运算符,因为不同的实现可能会产生不同的结果。 “未指定”基本上意味着实现可以定义行为。
关于c++ - 成员函数可以通过哪些方式相互比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6662917/