※ 引述《allex.bbs@bbs.csie.nctu.edu.tw (allex)》之銘言:
> ※ 引述《GunKing.bbs@bbs.cs.nthu.edu.tw (劉育信(Liu Yu Hsin))》之銘言:
> > Member function pointers are generally small structures that encode
> > information about a function's virtualness, multiple inheritance and
> > so on.
從網路上copy下來的
> 請問這段話是從哪看來的呢??
> 我查了一下 C++ Programming Language
> 裡面並沒有這樣的說法
> 其中只提到 pointer to member 只是一個offset
> 指向 vtable 中的offset (如果是指向virtual member的話)
上面是對的
利用vtable把每一個virtual function和offset都記下來
> 就我的猜想
> 即使是在多重繼承的狀況下
> pointer to member function應該也仍可指向相同的function
> 不需要再額外儲除virtualness或多重繼承的一相關資訊才是
這我就不敢保證了
因為每個compiler的作法都不一樣
> 也許我看得不夠深入
> 可以請你再說詳細些嗎???
在Visual C++裡,member function pointer可以是4, 8, 12, or 16 bytes
影響的因素是class(Single-,Multi-,Virtual-,Unknown)和compiler settings
不同的compiler實作member function pointer的方式也不太一樣
所以大小也不太一樣,有些compiler還會到20bytes
Microsoft Visual C++ 4.0 to 7.1 (.NET 2003)
GNU G++ 3.2 (MingW binaries, www.mingw.org)
Borland BCB 5.1 (www.borland.com)
Intel C++ 8.0 for Windows IA-32
Intel C++ 8.0 for Itanium (www.intel.com)
IBM XLC for AIX (Power, PowerPC)
同樣都是C++ compiler,但是機器不一樣,實作方法不一樣,
member function pointer大小也不一樣
所以我可以這樣說
member function pointer 是一個structure 包含一些訊息
當程式碼使用了multiple/ virtual inheritance
而我就能根據member function pointer的
這些訊息找到正確的'this' pointer的address
(我幫他做的解釋,也許你會問我是什麼訊息,
我的回答是每個compiler都不太一樣)
不過我覺得怎麼implementation不重要,除非你是做compiler的
怎麼用我覺得比較重要,
如果真的想知道怎麼實作的,可以把object code轉成組語來看看
--
※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: g924388.HSIN-A.ab.nthu.edu.tw