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