精華區beta Programming 關於我們 聯絡資訊
※ 引述《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