I would like to know if I can compare 2 member functions with the “<” operator. I can do “==” but I can’t use it in the case below. I tried casting them to void* but that won’t work either.
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;
}
};
Any ideas please?
If you just want to arbitrarily order them to be keys in a set/map, then you can
reinterpret_castthem. You may need a template class likeexact_int<sizeof(void (Foo::*bar)())>::typebecause pointers to member functions can have funny sizes.