kbasm 发表于 2013-2-1 12:13:50

方便地将 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);          qsort(values, count, sizeof(values), &GPlainFunction::invoke);          cout << "Normal qsort: \t\t";          for(int i = 0; i < count; ++i) {            cout << values << " ";          }          cout << endl;          RevertObject ro;          cb = GCallback(&ro, &RevertObject::revertCompare);          qsort(values, count, sizeof(values), &GPlainCallback::invoke);          cout << "Reverted qsort: \t";          for(int i = 0; i < count; ++i) {            cout << values << " ";          }          cout << endl;      }
页: [1]
查看完整版本: 方便地将 C++ 成员函数和函数对象转换成 C 风格的回调函数指针