Re: Re: [cpp]除了trunk还能用什么实现?

李慧霸 magazine.lihuiba at 163.com
Thu Aug 31 16:40:17 CST 2006


有三个办法:
1。boost::function、boost::bind等东西
2。用std::mem_fun
3。假设p为对象指针,func是p的某成员函数指针,则可这样调用:p->*func(参数)

------------------				 
李慧霸
2006-08-31

-------------------------------------------------------------
发件人:lijie
发送日期:2006-08-31 15:12:45
收件人:C++ Discuss Group
抄送:
主题:Re: [cpp]除了trunk还能用什么实现?

可能是我说得不太清楚。那个系统回调注册部分的实现原理和你这个差不多,问题在于如何在回调函数中取到对象?我想了一下可能必须要写trunk代码了,因为没办法额外传递一个对象过去,又没有额外的参数可以标识这个对象。

在 06-8-31,李慧霸<magazine.lihuiba at 163.com> 写道:
> 看样子是根据method名称注册一个或多个回调函数,在适当的时候调用。
> 如果同一个medthod最多只有一个回调函数,就用一个变量保存指针,如果会有多个回调函数就用一个容器(list、vector、set之类的东西)保存。
> 以set为例,记录回调函数的数据结构可这样表示:
> std::map<std::string, std::set<PROC> > registry;
>
> 注册时这样:
> registry[method].insert(proc);
>
> 调用:
> std::set<PROC>& methods(registry[method]);
> std::set<PROC>::iterator it=methods.begin();
> while(it!=methods.end())
> {
>         (*it)(参数);
>         ++it;
> }
>
> 取消回调:
> registry[method].erase(PROC);
>
> ------------------
> 李慧霸
> 2006-08-31
>
> -------------------------------------------------------------
> 发件人:lijie
> 发送日期:2006-08-30 21:15:44
> 收件人:Cpp at codingnow.com
> 抄送:
> 主题:[cpp]除了trunk还能用什么实现?
>
> 为一个现有系统实现C接口到C++的包装,其中一部分类似于Windows中注册窗口回调过程,它的C接口类似这样:
> typedef int (*PROC)(int);
> int reg_api(const char* method, PROC proc);
>
> 现在要完成MFC或ATL这样的从C接口的WND_PROC到窗口类处理过程的分派。
>
> 由于回调过程中缺少类似于WND_PROC中第一个HWND的参数,所以无法使用映射表采用查表法来完成。使用机器码编写trunk(这玩意怎么译?ATL中好像用的就是吧)又会遇到不同平台、编译器不兼容的情况,还有没有其它办法达到一样的效果?

_______________________________________________
Cpp mailing list
Cpp at codingnow.com
http://codingnow.com/mailman/listinfo/cpp




More information about the Cpp mailing list