我正在處理的項目需要向用戶表示許多不同的硬件寄存器作爲類對象。我幾乎完成了我的對象模型,但是我有一個障礙,我不知道如何超越。這些寄存器使用結構暴露。所有這些寄存器結構都將從一個基本結構繼承,這將提供有用的東西,例如如何從內存獲取特定的寄存器值並將其存儲到位域。使用這個指針指向一個類中的位字段
現在,好的是所有這些寄存器都很好地對齊DWORD。所以,我的代碼是這樣的:
struct Base {
DWORD offset;
Driver* pToDrv;
// methods to set/get values to the registers using the driver pointer
void SetRegister(DWORD val);
};
struct Register1 : public Base {
DWORD bit0 : 1;
DWORD bit1 : 1;
// etc. until 32 bits
DWORD bit31 : 1;
// getters/setters for the individual bits
void SetFullRegister(DWORD val) {
*(reinterpret_cast<DWORD*>(this)) = val; // uh-oh! This doesn't point to bitfield
SetRegister(reinterpret_cast<DWORD*>(this)); // same thing here
}
};
我與這個指向基本實例在派生對象的方法使用,即使在較小的程序更簡單的方法驗證。我如何確保這個指向我正在嘗試執行的操作的派生對象的開始?
我嘗試以下方法:
*(reinterpret_cast<DWORD*>(this + sizeof(Derv))) = val;
雖然沒什麼不好貌似發生了,最終的結果是什麼都沒有發生過。我知道這是不正確的,因爲價值被分配到某個地方,但是,畏縮,我不知道在哪裏。這顯然不起作用,也不是一種安全的方法。
如果我沒有充分描述我的問題,請讓我知道。
感謝, 安迪
謝謝。我相信這種方法解決了這個問題。我知道我忽略了一個簡單的答案。這在我測試的縮小版本中起作用。現在,爲了與更大,更醜陋的程序集成在一起。 – 2012-02-28 20:52:58