方便地将 C++ 成员函数跟函数对象转换成 C 风格的回调函数指针

方便地将 C++ 成员函数和函数对象转换成 C 风格的回调函数指针
英文原文在这里。

http://www.kbasm.com/cpp-use-member-function-as-c-callback.html

并无玄妙,只是用function traits解析了函数类型然后定义了几个静态函数而已。

用法

    typedef int Compare(const void *, const void *);  
    struct CompareObject {  
        int operator() (const void * a, const void * b) const {  
            return (*(int*)a - *(int*)b);  
        }  
    };  
    struct RevertObject {  
        int revertCompare(const void * a, const void * b) {  
            return (*(int*)b - *(int*)a);  
        }  
    };  
    GCallback cb;  
    CompareObject co;  
    void testPlaincallback() {  
        int values[] = { 6, 2, 1, 3, 5, 4 };  
        const int count = sizeof(values) / sizeof(values[0]);  
        qsort(values, count, sizeof(values[0]), &GPlainFunction::invoke);  
        cout << "Normal qsort: \t\t";  
        for(int i = 0; i < count; ++i) {  
            cout << values[i] << " ";  
        }  
        cout << endl;  
        RevertObject ro;  
        cb = GCallback(&ro, &RevertObject::revertCompare);  
        qsort(values, count, sizeof(values[0]), &GPlainCallback::invoke);  
        cout << "Reverted qsort: \t";  
        for(int i = 0; i < count; ++i) {  
            cout << values[i] << " ";  
        }  
        cout << endl;  
    }