看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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)