※ 引述《ayumiQmazaky (拜託刪我 爛人)》之銘言:
: 最近再想pointer to member 到底use case是什麼
: 我完全想不到
: 我看了一些範例
: http://tw.myblog.yahoo.com/briclin09/article?mid=83
: 如上面連結
: 雖然看得好像懂
: 但是仔細想想
: 1. 我明明有他instance了我幹嘛故意寫這種語法繞一圈 去invoke他的member funcion.
: 2. 我看到的範例都是在main function宣告一個object 然後去刻意用pointer to
: member 去呼叫他的function 無法讓我領會這個寫法的奧妙
obj.add(); // (1)
(obj.*fun)(); // (2)
(1)的程式碼指定呼叫"特定一個"函式, 叫做add(), 但(2)是呼叫
signature 和add()相同的"其中一個"函式(不需知道名稱). 假如
你在該類別中刪去add()的宣告, (2)不會受影響(1)則是跟著要改
: 2. 像C#的event 可以註冊 "不同class" 底下的function(只要prototype相同)
: 我在想C++有沒有辦法 自己寫這種模擬
不同類別的methods因為隱藏的參數this, 所以被視為擁有不同
signatures, 可以制定介面透過is a語意將他們串起來:
http://codepad.org/FXOHadzF
但如果你想藉此更改通知者的某些屬性, 那麼通知者也可以用
介面串起來:
http://codepad.org/B6c5loQ6
也有不需繼承的方式, 但實質上來說是靠多幾層函式呼叫或者使
用屬性來記錄通知者是誰:
http://codepad.org/AGjJh0iQ
依賴介面還是依賴實際類別就要看你的架構和效能來做權衡, 選
用lambda還要對不同編譯器搜尋外部名稱規則差異有所了解, 最
重要的要注意你類別的包含關係及物件生命週期的控管.
總之還是叫用同類別的methods較保險(存有欲操作屬性).
--
★ ★ ★ ★
★ ★ ★ ███ ███ █ █▌█ ██◣ ███ ▋▋█ ★ ★ ★
█▂█ █▃█ █ ███ █▆█ █▄█ ███
★ ★ █ ◣ █ █ █ ▋██ █▆◤ ███ ███ ★ ★
Kim Jae Kyung Koh Woo Ri Cho Hyun Young Kim Ji Sook
φwindyhorse No Eul Oh Seung A Jung Yoon Hye
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
※ 編輯: loveme00835 來自: 140.121.197.115 (12/15 05:27)