Chinaunix首页 | 论坛 | 博客
  • 博客访问: 403103
  • 博文数量: 48
  • 博客积分: 1820
  • 博客等级: 上尉
  • 技术积分: 705
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-28 23:10
文章分类

全部博文(48)

文章存档

2012年(1)

2011年(12)

2010年(34)

2009年(1)

分类: C/C++

2010-04-13 13:07:15

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(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;
}

阅读(4412) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~