C + + 멤버 함수 와 함수 대상 을 C 스타일 의 리 셋 함수 포인터 로 편리 하 게 변환 합 니 다.

1713 단어 htmlC++cC#
영어 원문 여기 있 습 니 다.
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;  
    }  

좋은 웹페이지 즐겨찾기