C++ 成员函数指针 转 C函数指针
时间:2010-04-13 来源:gogozhaoxinfeng
C++ 成员函数指针 转 C函数指针
http://plainmind.spaces.live.com/blog/cns!E27C33778F7E30FD!327.entry
上网友文章指出 指向成员函数的指针并非指针,是一个类内偏移
C++ 普通成员函数不能直接转成C 风格的函数指针。
但是C++的static 类成员函数可以直接转化成C风格的函数指针。这样当要使用C风格的函数指针时候,通过中间 static 类成员函数 间接调用普通成员函数。
比如使用C 库时候,可能需要C风格的函数指针做回调,例如pthread_create 就需要一个
void* (*func) (void*); 的函数指针,要把一个类成员函数填进去就只能通过static 成员函数了。当然在模块了直接声明 static void* call_back(void*) 也可以;
下面贴一个我自己测试时候的代码。
可以 g++ 编译运行 。
class CFun
public:
typedef void (CFun::*CFunPtr )();
public:
void print()
{
cout <<"CFun::print...\n";
}
static void* get(void* ptr)
{
cout <<"CFun::get...\n";
CFun* tmp_ptr = reinterpret_cast<CFun*>(ptr);
tmp_ptr->print();
return NULL;
}
};
int main( int argc , char* argv[])
{
CFUNCPTR main_ptr =NULL;
main_ptr = &CFun::get;
main_ptr(&main_ptr);
return 0;
}
相关阅读 更多 +