stl,boost或其他LGPL開源工具包中的模板的行爲是否如下所示: -
- 具有自定義對齊的相對指針,用於存儲更少位以減少範圍的選項。 一個可能的實現來說明: -緊湊偏移指針,現有的實現?
template<typename T, typename OFFSET=int,
int ALIGN_SHIFT=2>
class OffsetPtr
{
OFFSET ofs;
public:
T* operator->() {
return (T*) (((((size_t)this)>>ALIGN_SHIFT)+ofs)<<ALIGN_SHIFT);
};
void operator=(T* src) {
size_t ofs_shifted = (((size_t) src)>>ALIGN_SHIFT) - (((size_t) this)>>ALIGN_SHIFT); //asserts..
ofs = (OFFSET) (ofs_shifted);
}
//...
};
它的東西,我會過去經常創造(緊湊型緩存友好預編譯的數據結構),例如將數據分解爲小於128k的塊OFFSET = short
我在古代C#定義中使用的另一種變體將使用標題中的偏移量,其中對齊將更有用。
我已經看到一些關於「間圖書館」在具有「offset_ptr」,看起來非常相似的提升,所以它很可能有一個現有的執行,包括這個確切的模式地方。 它的快速寫,但有可能是像一套圍繞着同一個概念建立相關的STL兼容的數據結構的現有實現的好處 - 一個「近矢量」與16位偏移指針&例如16位計數
Boost的'offset_ptr <>'與您想要的不同 - 它存儲偏移指針本身的地址和指向對象的地址之間的距離,而不是允許任意偏移量。就我個人而言,我認爲它名字不好。 'relative_ptr <>'會更合適。 – ildjarn
當然,就像'相對尋址'一樣。我通常會把它叫做抵消,所以我也可以這麼做 - 儘管也許我可以稱之爲'相對'來區分它與提升',好的建議。 –