Re: [问题] 将 class B 之 mem. func 塞到 class A 之 func.ptr

楼主: kwpn (ITSST)   2015-07-18 10:29:36
http://codepad.org/J87uWOk5 // 20150718 1300 edited
这是比较旧也比较传统的做法,
许多C语言的API常使用这种方式让C++物件被callback。
(ex: CreateThread, ffmpeg的AVCodecContext有个member叫opaque)
这样做可以避免class Display知道有PlaneDlg这class,
也就是说,传入的class不限定于PlaneDlg。
但比起原po最早的写法,这写法就不能用在global function,
所以若不是有特殊限制,我比较建议是用C++11的std::function,
因为可接受任何同型的callable object,
(ex: global function, member function, lambda, std::function,
return of std::bind, ...)
//
作者: LiloHuang (十年一刻)   2015-07-18 10:58:00
如果 Compiler 不支援 C++11 可用 boost::function
作者: EdisonX (卡卡兽)   2015-07-18 12:34:00
谢谢您的细心回复 , 这方法看起来的确很像 Win32 设计
楼主: kwpn (ITSST)   2015-07-18 13:00:00
我名称取错了,取成CallBackObj,但一般都是取名为user_data

Links booklink

Contact Us: admin [ a t ] ucptt.com