作者bugmens (今天天氣好)
看板C_and_CPP
標題Re: [分享]c++ virtual function table
時間Mon Oct 15 17:32:53 2012
※ 引述《descent (返無)》之銘言:
: 研究 c++ runtime 之後, 我才瞭解 c++ compiler 的邪惡,
: 它為了我們的程式碼插了很多額外的 code, 令人又愛又恨。
: 在大部份狀況下, 我們不用管這些事情, 搞懂這些東西對我來說純粹是個機緣。
: 有點中毒, 愈挖愈深。
: 建議先看這篇: C++ 虛函數表解析
: http://blog.csdn.net/haoel/article/details/1948051
: 這篇則是我反組譯後分析 virtual function table
: http://descent-incoming.blogspot.tw/2012/09/c-virtual-function-table.html
: 有任何錯誤還請各位朋友指證。
感謝原PO的分享,順著這篇我也將我的問題提出來問看看
這是OpenCV中的cap_dshow.cpp一小部份
http://tinyurl.com/9lkrfdc
class CvCaptureCAM_DShow : public CvCapture
{
public:
CvCaptureCAM_DShow();
virtual ~CvCaptureCAM_DShow();
virtual bool open( int index );
virtual void close();
virtual double getProperty(int);
virtual bool setProperty(int, double);
virtual bool grabFrame();
virtual IplImage* retrieveFrame(int);
virtual int getCaptureDomain();
protected:
void init();
int index, width, height,fourcc;
IplImage* frame;
static videoInput VI;
}; ^^^^^^^^^^^^^
//--------------------------------------------------
class videoInput{
public:
videoInput();
~videoInput();
........其他的函式
};
http://tinyurl.com/8uemmun
//--------------------------------------------------
就PO所提的,這些Virtual Function最後都會做成Virtual Table
要呼叫的時候就到這個表格找函式的位置,然後再跳過去執行
只是現在我想要找出protected變數videoInput VI;的位置
因為我要藉由vi的位置來呼叫videoInput的函式
我原本天真的以為變數也會有類似的表可以查詢
但我google找了好久都只有提到function有表可以查
卻都沒提到變數的部份是怎麼安排的
請問各位網友這樣的問題有解嗎
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.164.232.143
→ azureblaze:用函數包? virtual videoInput &getVI(){return VI;} 10/15 17:47
→ firose:多了vtbl這層是為了要改寫函式位址, 沒改寫需求為什麼要表? 10/15 18:13
推 littleshan:看不懂你的需求 10/15 19:20
→ chengcti:變數在 vtable 中一樣是變數, function 才是 pointer. 10/15 21:43