C++比较成员函数指针

Imb*_*bue 4 c++ pointers member-function-pointers

在C++中,是否可以为成员函数指针定义排序顺序?似乎运算符<未定义.此外,施放到void*是违法的.

class A
{
    public:
        void Test1(){}
        void Test2(){}
};

int main()
{
    void (A::* const one)() = &A::Test1;
    void (A::* const two)() = &A::Test2;

    bool equal = one == two; //Equality works fine.
    bool less = one < two; //Less than doesn't.

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

AnT*_*AnT 6

函数指针在C++中没有关系可比性.除了至少有一个指针实际指向虚拟成员函数(在这种情况下结果未指定)的情况之外,支持等式比较.

当然,您总是可以通过实现比较谓词并明确地比较指针来引入排序(虽然看起来不会太优雅,因为您只能使用相等比较).其他可能的解决方案将跨越各种特定于实现的"黑客"领域.