2007-05-09

callback 在 C++ 中的使用

C++ 的class中只有用 static 的公有成员函数才有可能作为参数传递给 callback。
但是 static 的成员函数却不能访问非 static 的成员,因为对于static来说this指针是没有意义的。

那么有个变通的解决方法:自己搞一个 ^_^
——用一个该class的指针作参数,通过该参数来变通的访问类的实例。
如下:


#include <iostream>

using namespace std;

typedef int (* FUN)(int,void*);

class AA {
public:
   int aa;
   static int fun(int n, AA* a) {
      return a->aa>>n;
   }
};

int f(int f, void*)
{ return f<<2; }

void p (FUN callback, void* arg=NULL)
{
   cout<<callback(8, arg)<<endl;
}

int main ()
{
   AA a;
   a.aa = 0x1000;
   p (f);
   p ((FUN)AA::fun, (void*)&a);
   return 0;
}

对此,pthread_create 最后一个参数的魔力就体现出来了。
//EOF

0 comments: