Re: [問題] functor to function pointer
※ 引述《ialk (沒有靈感..)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: MSVC++ 10.0
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: std
: 問題(Question):
: runtime error
: 預期的正確結果(Expected Output):
: print
: 1
: 2
: 3
: 錯誤結果(Wrong Output):
: access violation
: 程式碼(Code):(請善用置底文網頁, 記得排版)
: http://ideone.com/1FKquB
: 補充說明(Supplement):
: 如程式碼,會死在18行
: fp g3 = *g1.target<fp>();
: 請問應該要怎麼寫才是正確的
→
04/29 12:17,
04/29 12:17
→
04/29 12:17,
04/29 12:17
→
04/29 12:18,
04/29 12:18
→
04/29 12:24,
04/29 12:24
→
04/29 12:24,
04/29 12:24
→
04/29 13:02,
04/29 13:02
→
04/29 13:02,
04/29 13:02
→
04/29 13:02,
04/29 13:02
推
04/29 15:28,
04/29 15:28
→
04/29 15:28,
04/29 15:28
→
04/29 15:29,
04/29 15:29
→
04/29 15:35,
04/29 15:35
→
04/29 15:37,
04/29 15:37
那麼, 實際上轉成 function pointer 時是會丟失資訊的, 這不可能完全對應過去
function pointer 就只能是指到 *某一個* function 的 pointer
萬一可以的話, 那麼
A a1, a2;
function<void()> f = bind(&A::member, &a1),
g = bind(&A::member, &a2);
這樣 f 跟 g 轉成 function pointer 時位址應該一樣嗎?
假如一樣, 那資訊就丟失了 (因為等同呼叫到同一個函數)
假如不一樣, 就變成有 run-time code generation
要達成這樣的效果, 一定要其他某種方式來得知要呼叫 a1 還是 a2
例如直接靜態就知道是 *哪幾個* 的話, 手動寫 function wrapper
void call_a1() { a1.member(); }
否則另外存在某個地方
A *a;
void call_a() { a->member(); }
a = a1;
無論是何種方式, 我想從原本的問題整體來考量,
應該有機會得到比這兩種寫法更好的作法,
不過這需要多一點原本問題的資訊.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.16.135
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1430295560.A.B73.html
→
04/29 16:32, , 1F
04/29 16:32, 1F
無論哪種 case, 都得把 a1/a2 pass 進去
統一的轉成, 如, void(*)(), 是有困難的
※ 編輯: suhorng (140.112.16.135), 04/29/2015 16:37:04
→
04/29 18:59, , 2F
04/29 18:59, 2F
同意
※ 編輯: suhorng (220.137.19.30), 04/29/2015 19:03:36
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):