游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7911|回复: 20

[C++][指针]关于指向成员函数的指针~

[复制链接]

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
发表于 2004-8-17 23:03:00 | 显示全部楼层 |阅读模式
1.定义指向成员函数的指针可以这样:
type (class_name::*funcptr)(para_list);
所以定义一个这样的指针就必须事先知道那个class_name。
那么有什么办法可以定义一个指针,让它可以指向任意类的成员函数呢?

2.

  1. class Base
  2. {
  3. public:
  4.   int foo(int m);
  5. }

  6. class A : public Base
  7. {
  8.     int foo(int m);
  9.     int plmm(int m);
  10. }

  11. main()
  12. {
  13.   int (A::*func1)(int);
  14.   func1=&A::foo;
  15.   int (A::*func2)(int);
  16.   func2=&A::plmm;
  17.   A mm;
  18.   Base *qq;
  19.   qq=&mm;
  20.   qq->*func1(1);//会怎样?
  21.   qq->*func2(1);//会怎样?
  22. }
复制代码

30

主题

298

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
QQ
发表于 2004-8-17 23:27:00 | 显示全部楼层

Re:[C++][指针]关于指向成员函数的指针~

用void型的指针应该就可以吧。在调用函数之前要进行转型声明。

30

主题

298

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
QQ
发表于 2004-8-17 23:36:00 | 显示全部楼层

Re:[C++][指针]关于指向成员函数的指针~

想了一想可能我在楼上提的方法不行。抱歉。
因为即使进行转型,this指针从何而来?我想当然了。

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2004-8-18 00:24:00 | 显示全部楼层

Re:[C++][指针]关于指向成员函数的指针~

this指针似乎不能在类外面用吧。。。
所以我记得通用的函数指针好象是typedef (void* ptr)(void*)。
好象是,记不明白。

30

主题

298

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
QQ
发表于 2004-8-18 02:05:00 | 显示全部楼层

Re:[C++][指针]关于指向成员函数的指针~

众所周知,类成员函数是通过this指针来访问类的数据成员的。只用void型的函数指针的话,即使强制转型也没有办法把函数与类实例进行绑定,会出现编译错误。

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2004-8-18 06:08:00 | 显示全部楼层

Re:[C++][指针]关于指向成员函数的指针~

呵呵~谢谢大家~
其实是这样的~
我想做网络游戏的服务器端,所以需要一个回调函数机制来处理网络数据包,而且我想把这些函数做成类的成员函数(比如NPC类),并且要放到一个动态连接库里(在运行时载入)~所以,我的设计是:
我做一个基类,里面有一个成员函数request_method(参数),有一个static的hash表(里面是消息标识和处理函数的偏移量),另外还有注册函数等函数来维护这个hash表。函数库里人物类、怪物类等都从这个基类派生出来,并且都有一个static的init()函数,在游戏开始前服务器程序会调用这些类的init(),在init()里派生类会把自己的一些成员函数的偏移量和相应的消息标识注册进基类里的hash表,这样以后运行时,虽然服务器端程序不知道这些派生类的实例到底是怎样的(都通过基类指针来操作),但是仍然能调用这些派生类的成员函数。因为函数被调用时,是外界先调用某个实例的request_method()函数,并且把一些参数(包括数据包)传入,然后request_method()会查找hash表,找到响应函数的偏移量后,就调用this->*func(),并且也把一些参数(包括数据包)传入。

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2004-8-18 06:10:00 | 显示全部楼层

Re:[C++][指针]关于指向成员函数的指针~

另外,在基类函数里获得的this和在派生类函数里获得的this是否相同?

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2004-8-18 11:05:00 | 显示全部楼层

Re:[C++][指针]关于指向成员函数的指针~

一定是不同的。

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2004-8-18 11:06:00 | 显示全部楼层

Re:[C++][指针]关于指向成员函数的指针~

另外如果具有相同行为的话,可以定义一个基类,然后派生类重载这个函数,声明一个指向基类函数的指针应该可以了。

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2004-8-18 11:19:00 | 显示全部楼层

Re:[C++][指针]关于指向成员函数的指针~

我就是希望不限制那些类的行为,让游戏开发者有足够的自由来设计自己的游戏~而且我觉得最好尽量避开动态多态~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-17 08:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表