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 =短
我在古代C #defines中使用的另一种变体将使用标题中的偏移量,其中对齐将更有用。
我在boost中看到了一个'interprocess library',它有一个'offset_ptr',看起来非常相似,所以很可能现有的实现包括某处的确切模式。 编写起来很快,但现有的实现可能会带来好处,例如围绕相同概念构建的一组相关的符合stl的数据结构 - 具有16位偏移指针和放大器的“近矢量”。例如16位计数