C++函数指针
来源:互联网 发布:云计算的架构和类型 编辑:程序博客网 时间:2024/05/01 14:39
在C++中,成员函数的指针一般是这么用的,
- #include <stdio.h>
- class A{
- public:
- char hello(int a){
- printf("hello world");
- return a-'0';
- }
- };
- typedef char (A::*PTRFUN)(int);
- int main()
- {
- A* obj=new A();
- PTRFUN pFun= &A::hello;
- (obj->*pFun)(2);
- return 0;
- }
但你可能遇到这样的情况,C++要将对象和函数指针传递给c,然后由c去调用,你可能会这么做:
void invokeFunc(void* obj,void* pfunc)
{
A* class_obj=(A*)obj;
PTRFUN pFun=(PTRFUN)pfunc;
(class_obj->*pFun)(2);
}
int main()
{
A* obj=new A();
PTRFUN pFun;
pFun = &A::hello;
invokeFunc(obj,pFun);
}
但是你会发现编译器会对PTRFUN pFun=(PTRFUN )pfunc;报错,你可以这样做:
- #include <stdio.h>
- class A{
- public:
- char hello(int a){
- printf("hello world");
- return a-'0';
- }
- };
- typedef char (A::*PTRFUN)(int);
- void invokeFunc(void* obj,void* pfunc)
- {
- A* class_obj=(A*)obj;
- PTRFUN* pFun2=(PTRFUN*)pfunc;
- PTRFUN pFun=*pFun2;
- (class_obj->*pFun)(2);
- }
- int main()
- {
- A* obj=new A();
- PTRFUN pFun;
- pFun = &A::hello;
- invokeFunc(obj,&pFun);
- return 0;
- }
也就是将一级指针转换为2级指针,这样编译就不会读void*转成员函数指针进行报错。
- C指针函数 && 函数指针
- C++----函数&函数指针
- C++,C函数指针
- C/C++:函数指针
- 【c/c++】指针函数和函数指针
- 【C和指针】函数指针
- 《c和指针》函数指针
- c语言函数指针
- C/C++函数指针
- C语言函数指针
- [C]函数指针数组
- C 函数指针
- C 函数指针数组
- c 函数指针
- c/c++函数指针
- c 函数指针
- c中的函数指针
- c函数指针
- 修改VS2008(vc)中工程/解决方案/类的名字
- 快乐指南:程序员版
- SurfaceView显示Camera拍摄的画面
- “小苏有朋”马宁,一种解释不出的穿透力或杀伤力的视觉震憾
- How to pass the value to the function when clicking on the UIButton
- C++函数指针
- C# 鼠标拖放图片透明缩略图效果实现思路
- 1014. Specialized Four-Dig
- 如何防止代码腐烂
- 问题Re-installation failed due to different application signatures.解决
- perl: symbol lookup error: /usr/local/lib/libtdsodbc.so: undefined symbol: libiconv_open的解决办法
- 1007. To and Fro
- S3C6410启动模式介绍
- Android2.2.1广播大全