C++ 压缩偏移量指针,现有实现?

C++ 压缩偏移量指针,现有实现?,c++,pointers,boost,stl,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*) ((

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);
    }
    //...
};
模板
类抵消
{
偏移量ofs;
公众:
T*运算符->(){
return(T*)((((size_T)this)>>ALIGN_SHIFT)+ofs)ALIGN_SHIFT)-(((size_T)this)>>ALIGN_SHIFT);//断言。。
ofs=(偏移量)(ofs_移位);
}
//...
};
这是我过去经常创建的东西(紧凑的缓存友好型预编译数据结构),例如,对于分解为128k以下块的数据,OFFSET=short
我在古代C#defines中使用的另一种变体是使用标题的偏移量,在标题中对齐更有用

我看到boost中的“进程间库”有一个“offset_ptr”,看起来非常相似,所以似乎有一个现有的实现在某处包含了这个确切的模式。
它很快编写,但是对现有的实现可能有好处,比如一组围绕同一概念构建的相关STL兼容数据结构——如果使用Visual C++,则具有16位偏移指针和“16位计数”的“接近向量”,例如

< P>您可能想使用。

Boost的
offset\u ptr
与您想要的不同——它存储偏移指针本身的地址与指向对象的地址之间的距离,而不允许任意偏移。就我个人而言,我认为它的名字不好
relative_ptr
更合适。当然,就像“相对寻址”一样。我通常称之为偏移量,所以我也同意,虽然我可以称我的“亲戚”来区分它和提升,这是个好建议。谢谢。我不知道它的存在。遗憾的是,我必须避免使用特定于MS的扩展,因为我主要使用gcc和llvm进行编译,我想知道c++11是否有类似的功能。从asm时代的低级代码开始,我通常的方法是对结构基本身进行偏移,这通常是最方便的。它也作为C宏工作得很好,但是上面的实现在C++中是非常诱人的。