英文原文在这里。
[url]http://www.kbasm.com/cpp-use-member-function-as-c-callback.html[/url]
并无玄妙,只是用function traits解析了函数类型然后定义了几个静态函数而已。
用法
[url]http://www.kbasm.com/cpp-use-member-function-as-c-callback.html[/url]
并无玄妙,只是用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;
}