方便地将 C++ 成员函数和函数对象转换成 C 风格的回调函数指针 CC++C#HTML
程序员文章站
2022-06-04 20:05:50
...
英文原文在这里。
http://www.kbasm.com/cpp-use-member-function-as-c-callback.html
并无玄妙,只是用function traits解析了函数类型然后定义了几个静态函数而已。
用法
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; }