C++能否实现Delphi中的method pointers(of object)

wzdsyzh 2006-01-24 10:19:38
Delphi中有一种类型是指向类的方法的指针,procedure/function...of object。
C++中好像没有这种语法。
像下面这样的功能,在C++中怎么实现?
type
TEvent=procedure of object;
TA = class
public
procedure OnEvent;
end;
var
A1: TA;
Event1: TEvent;
……
Event1:=A1.OnEvent;

以后可以通过Event1调用A1.OnEvent
...全文
151 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzdsyzh 2006-01-24
  • 打赏
  • 举报
回复
晕~
“模块”——“模板”!
wzdsyzh 2006-01-24
  • 打赏
  • 举报
回复
cad_vc: 强!

还有个问题,method pointers的第二个指针所指向的对象类型是没有限制的,就是我可以这样:
TA = class
...
procedure OnEvent;
end;
TB = class
...
procedure OnEvent;
end;
...
A1: TA;
B1: TB;
...
Event1:=A1.OnEvent;
...
Event1:=B1.OnEvent;

怎样实现这样的功能?用模块?
cad_vc 2006-01-24
  • 打赏
  • 举报
回复
sorry!
昏了头了。

P_fun a_fun = &A::fun; //这种方式应该出现在类的定义 体中

作为对象使用时应该这样:

A a;
P_fun a_fun = a.fun();
(a.*P_fun)();
wzdsyzh 2006-01-24
  • 打赏
  • 举报
回复
cad_vc:你的代码在vc下编译不过。

说明一个method pointerS,这种类型实际上是一对指针:1.一个类的函数指针;2.一个对象指针。大家都知道调用类的成员函数传递一个隐含的this指针,method pointerS的第二个指针正是用于作为隐含的对象指针传递的。
cad_vc 2006-01-24
  • 打赏
  • 举报
回复
用指向类成员函数的指针

class A
{
public:
fun();
}

typedef (A::*P_fun)();

void main()
{
P_fun a_fun = &A::fun;
a_fun();
}
Muf 2006-01-24
  • 打赏
  • 举报
回复
这种指针,是C++的一个弱项,标准C++目前还没有为此增加语法上的支持。因此,要实现起来实在是很麻烦的一件事。

替代方案有:
1 BCB为此增加一个__closure 的关键字。优点是直接支持,缺点是borland专用。
2 Boost库有一个function。优点是大多编译器都支持,缺点是boost好大。
3 自已用模板和宏写一堆。优点缺点者是靠你自已。

反正,麻烦!
alwaysakid 2006-01-24
  • 打赏
  • 举报
回复
用模板是不行的,

可以A,B从共同基类继承,虚拟函数
ChrisAK 2006-01-24
  • 打赏
  • 举报
回复
楼上的是
托管C++和C++/CLI里的吧?
Jinhao 2006-01-24
  • 打赏
  • 举报
回复
实现一个delegate
cad_vc 2006-01-24
  • 打赏
  • 举报
回复
你问的这是个c++比较深入的话题,我也是个入门级水平,讲不清楚。
建议你看看《Modern C++ Design》第五章 泛化仿函数

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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