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

标签 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 以下 block 的数据 OFFSET=short
我在古老的 C#defines 中使用的另一个变体将使用 header 的偏移量,其中对齐会更有用。

我在 boost 中看到了一些关于“进程间库”的东西,它有一个“offset_ptr”,看起来非常相似,所以看起来很可能有一个现有的实现包括这个确切的模式某处。 它编写起来很快,但现有的实现可能会有好处,例如围绕同一概念构建的一套相关的 STL 兼容数据结构——例如,具有 16 位偏移指针和 16 位计数的“近 vector ”

最佳答案

如果您使用的是 Visual C++,您可能喜欢使用 __based pointers .

关于c++ - 紧凑的偏移指针,现有的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8285332/

相关文章:

c - 如何在c中打印指针?

c++ - Visual Studio 中的 long long 值

c++ - 除了 stringstream 之外,还有其他方法可以连接由多种类型的变量组成的字符串吗?

c++ - 将此指针作为weak_ptr传递给内部类

c++ - 为什么我必须确定重载模板基类方法的范围?

c - 返回指向 `char` 的指针数组

c++ - 正在释放的指针未分配?

c++ - 如何使用具有相同标签名称的对等值读取 Boost property_map

c++ - mmorpg 服务器端的网络库(libuv/boost::asio?)

c++ - 将 char* 转换为 boost::array 以供套接字使用