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
当然,就像'相对寻址'一样。我通常会把它叫做抵消,所以我也可以这么做 - 尽管也许我可以称之为'相对'来区分它与提升',好的建议。 –