紧凑的偏移指针,现有的实现?

时间:2011-11-27 11:49:15

标签: c++ pointers boost stl

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位计数

1 个答案:

答案 0 :(得分:2)

如果您使用的是Visual C ++,则可能希望使用__based pointers