比较成员函数指针时,我们需要关注两点:
成员函数指针是一种非常特殊的指针类型,我们无法直接比较两个成员函数指针的值。
由于各种原因,有时候我们需要比较两个成员函数指针的值,例如在某些排序算法中。
通常,我们可以采用以下两种方式来比较成员函数指针的值。
示例代码:
class Foo
{
public:
void bar(int x){ ... }
};
typedef void(Foo::*FooMemberFunc)(int);
bool compare(FooMemberFunc f1, FooMemberFunc f2)
{
void (*p1)(Foo*,int) = reinterpret_cast(f1);
void (*p2)(Foo*,int) = reinterpret_cast(f2);
return p1 < p2;
}
示例代码:
class Foo
{
public:
void bar(int x){ ... }
};
typedef void(Foo::*FooMemberFunc)(int);
bool compare(FooMemberFunc f1, FooMemberFunc f2)
{
uintptr_t p1 = reinterpret_cast(f1);
uintptr_t p2 = reinterpret_cast(f2);
return p1 < p2;
}