[問題] 請問跨類別的函數指標的使用

看板C_and_CPP (C/C++)作者 (咬咬嚼嚼猴子口味)時間13年前 (2013/04/18 18:50), 編輯推噓3(3017)
留言20則, 8人參與, 最新討論串1/1
請問我現在有兩個類別 場景Scece和物件Object 在場景中會有一個物件 在這物件中我需要呼叫到場景的某個函數Todo 請問我這樣的寫法的問題在那裡? class Scene { ... Scene() { m_pObj = new Object(&Sence::Todo); }; Object* m_pObj; void Todo(int A); ... } class Object { ... void (Scene::*m_fTodo)(int); Object(void (Scene::*fTodo)(int)): m_fTodo(fTodo) {}; void TodoinClass(); } void Object::TodoinClass() { m_fTodo(10); // 這邊會一直出現問題 無法通過compile } 出現的錯誤訊息是 error C2064: term does not evaluate to a function taking 1 arguments 請問鄉民前輩們 我犯的錯誤是什麼??? 感謝回答 -- 樂於當宅男 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.118.185.164

04/18 19:00, , 1F
this->*m_fTodo(10);
04/18 19:00, 1F

04/18 19:01, , 2F
->* 是不能拆的運算子所以這裡 this 應該不能省...吧?
04/18 19:01, 2F

04/18 19:04, , 3F
不是this,m_fTodo是Scene的member function
04/18 19:04, 3F

04/18 19:05, , 4F
所以你要提供一個Scene instance才能呼叫它
04/18 19:05, 4F

04/18 20:51, , 5F
這種情況一般是把Scene物件傳進去吧
04/18 20:51, 5F

04/18 23:30, , 6F
http://ideone.com/GTfvNT 盡可能鬆綁囉
04/18 23:30, 6F

04/19 09:23, , 7F
感謝大家回答 樓上的技巧好高深 有點看不太懂...
04/19 09:23, 7F

04/19 10:17, , 8F
想請問原po使用傳遞函數指標而非傳遞物件的用意是?
04/19 10:17, 8F

04/19 13:26, , 9F
啊, 只看到 member func pointer 沒注意到不是 this XD
04/19 13:26, 9F

04/20 10:03, , 10F
lo的解法別說有點看不懂,這連編譯器都有可能看不懂
04/20 10:03, 10F

04/20 12:44, , 11F
bind 的 partial apply 能力還真不是蓋的
04/20 12:44, 11F

04/20 12:46, , 12F
不過用 lambda 應該更簡單吧, 因解偶的關鍵是在 function<>
04/20 12:46, 12F

04/20 12:55, , 13F
polymorphism lambda 出來之前你還是要用 using 才能
04/20 12:55, 13F

04/20 12:56, , 14F
解決參數型態可能不合的問題
04/20 12:56, 14F

04/20 12:56, , 15F
阿打錯字...
04/20 12:56, 15F

04/20 13:06, , 16F
(1) std::function 型別參數不填 Scene member types
04/20 13:06, 16F

04/20 13:07, , 17F
是因為在呼叫的時候就是給 int 所以這邊可以抽象化成
04/20 13:07, 17F

04/20 13:08, , 18F
接受 int 引數的 functor, 即使convertible to origin
04/20 13:08, 18F

04/20 13:09, , 19F
param 也是可以呼叫 (2) 如果用 lambda 沒有 using
04/20 13:09, 19F

04/20 13:10, , 20F
type alias, 當型別不一致又會再轉型一次
04/20 13:10, 20F
文章代碼(AID): #1HRy_fCk (C_and_CPP)
文章代碼(AID): #1HRy_fCk (C_and_CPP)