颇具挑战性的问题,关于成员函数的函数指针--本人的C++功力不够

strangecat 2000-08-13 06:10:00
咱企图把一个类的成员函数的函数指针作为参数传递给另外一个全局函数.但是总编译出错,似乎不能取非static的成员函数的函数指针.谁能看看,是否真的不能取非static的成员函数的指针呢?
下面是示意:
void CallBackFunktion(int a, int b, int (*callback)(int, int))
{
int c = callback(a, b);
TRACE("CallBackreturn: % d", c);
}

class ClassA
{
int funk1(int n1, int n2);
void init();
}

void ClassA::init()
{
CallBackFunktion(1, 2, funk1); //此句引起编译错误
}
...全文
173 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
U皮特U 2000-08-13
  • 打赏
  • 举报
回复
动态取得函数的入口地址是可以做到的,我曾在函数入口处通过访问堆栈得到函数入口地址,不过我觉得这样做得不尝失。
非静态的变量可以通过参数传给静态函数的。
strangecat 2000-08-13
  • 打赏
  • 举报
回复
咱也知道应该用static,问题是如果将函数声明为static,其使用的所有变量也都要staic.而我希望这个函数使用的某些变量在每个对象中都有独立的实例.
softsprite所言不错,但我曾经想如果是在对象内部取函数指针,此时对象已经实例化,各函数的地址在函数表中已经存在,这样取函数指针应该不是不可能的.理论上存在这样的机会,就是不知道是否可能做到.
zzh 2000-08-13
  • 打赏
  • 举报
回复
如果把它定义为静态成员函数,就可以进行传递了,具休用法你可以参考CListCtrl里SortItem()函数的用法,它也是调用自定义的排序函数进行排序的。或者你定义为全局函数也可以进行传递。
U皮特U 2000-08-13
  • 打赏
  • 举报
回复
当然不行!编译时要求定位函数入口地址,类的实例未创建前,类的成员函数仅仅是一个定义而已没有实际的函数地址,如何传递?必须用静态成员函数,类中的静态成员函数对类的所有实例都只有一个,可以在编译时确定。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧