小编Tam*_*sák的帖子

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

是否存在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);
    }
    //...
};
Run Code Online (Sandbox Code Playgroud)

它是我过去常规创建的东西(紧凑缓存友好的预编译数据结构),例如,数据分成子128k块OFFSET = short
另一种我在古代C#defines中使用的变体将使用来自头部的偏移量,其中对齐会更有用.

我已经看到了一些关于在具有"offset_ptr",这看起来非常相似升压的"间图书馆",所以它很可能有一个现有的执行,包括这一确切模式的地方.编写起来很快,但现有实现可能会带来好处,例如围绕相同概念构建的一组相关的stl兼容数据结构 - 例如具有16位偏移指针和16位计数的"近矢量"

c++ boost pointers stl

5
推荐指数
1
解决办法
908
查看次数

标签 统计

boost ×1

c++ ×1

pointers ×1

stl ×1