Re: [問題] 關於Class指標的觀念
看板C_and_CPP (C/C++)作者descent (「雄辯是銀,沉默是金」)時間11年前 (2013/08/28 00:18)推噓2(2推 0噓 29→)留言31則, 7人參與討論串7/19 (看更多)
: → Feis:哇. A 去哪了? 好酷喔 08/27 22:48
: → Feis:可以幫我 "轉回來" 嗎? 08/27 22:51
: → descent:你的意思是要轉回 member function pointer 嗎? 08/27 22:51
: → Feis:當然阿. 不是很合理嗎 Q_Q 08/27 22:52
: → descent:我以為只要能執行就好, member function pointer 08/27 22:53
: → descent:的版本我不確定可以成功 08/27 22:54
: → Feis:那如果 64-bit 整數塞到 32-bit 整數就印不出來嗎? 08/27 22:54
: → Feis:其實我也不是很懂. 討論一下 08/27 22:55
http://www.parashift.com/c++-faq-lite/cant-cvt-memfnptr-to-voidptr.html
看來無法將 void* 轉 member function pointer。
我用得方法其實是把 member function 當成 non member function,
再把 this 傳進去。
大概像是這樣。
A aa;
(*(void(*)(A*))(addr) )(&aa);
難怪不能轉:
void (A::*p)() = &A::func;
這個指標 assign 的動作原來有兩個部份, non-virtual function
"剛好"可以這樣作。
non-virtual member function:
80486d1: c7 44 24 14 b4 86 04 movl $0x80486b4,0x14(%esp)
80486d8: 08
80486d9: c7 44 24 18 00 00 00 movl $0x0,0x18(%esp)
80486e0: 00
virtual member function:
void (A::*p)() = &A::func;
804873f: c7 44 24 14 01 00 00 movl $0x1,0x14(%esp)
8048746: 00
8048747: c7 44 24 18 00 00 00 movl $0x0,0x18(%esp)
804874e: 0
難怪 printf 會得到 1。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.184.185.55
→
08/28 00:24, , 1F
08/28 00:24, 1F
→
08/28 08:36, , 2F
08/28 08:36, 2F
→
08/28 08:37, , 3F
08/28 08:37, 3F
→
08/28 08:42, , 4F
08/28 08:42, 4F
→
08/28 08:45, , 5F
08/28 08:45, 5F
→
08/28 08:45, , 6F
08/28 08:45, 6F
※ 編輯: descent 來自: 59.125.239.51 (08/28 09:18)
→
08/28 10:01, , 7F
08/28 10:01, 7F
→
08/28 10:02, , 8F
08/28 10:02, 8F
→
08/28 10:04, , 9F
08/28 10:04, 9F
→
08/28 10:05, , 10F
08/28 10:05, 10F
→
08/28 10:07, , 11F
08/28 10:07, 11F
→
08/28 10:08, , 12F
08/28 10:08, 12F
→
08/28 10:09, , 13F
08/28 10:09, 13F
→
08/28 10:10, , 14F
08/28 10:10, 14F
→
08/28 10:10, , 15F
08/28 10:10, 15F
→
08/28 10:12, , 16F
08/28 10:12, 16F
→
08/28 10:12, , 17F
08/28 10:12, 17F
→
08/28 12:49, , 18F
08/28 12:49, 18F
→
08/28 12:50, , 19F
08/28 12:50, 19F
→
08/28 12:50, , 20F
08/28 12:50, 20F
→
08/28 16:42, , 21F
08/28 16:42, 21F
→
08/28 16:42, , 22F
08/28 16:42, 22F
推
08/28 18:37, , 23F
08/28 18:37, 23F
→
08/28 18:38, , 24F
08/28 18:38, 24F
→
08/28 18:38, , 25F
08/28 18:38, 25F
→
08/28 18:39, , 26F
08/28 18:39, 26F
→
08/28 18:40, , 27F
08/28 18:40, 27F
→
08/28 19:28, , 28F
08/28 19:28, 28F
推
08/28 19:35, , 29F
08/28 19:35, 29F
→
08/28 19:40, , 30F
08/28 19:40, 30F
→
08/28 19:43, , 31F
08/28 19:43, 31F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章