欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-04 20:05:44
...
英文原文在这里。

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;  
    }  
相关标签: C C++ C# HTML