C++ C+中的不透明手柄+;

C++ C+中的不透明手柄+;,c++,C++,我正在实现一个不透明的数据结构,它在内部是一组不透明的数据结构。让我们称之为唱片。将有多个查询到记录的不同字段,每个字段具有相同的键。我有此表单的API列表: QueryFieldX(KEY key, FieldX& Data) 每个查询当前都使用键搜索记录,然后获取数据 我想将其更改为以下形式: GetHandleToRecord(KEY key, MYHANDLE handle); QueryFieldX(MYHANDLE handle, FieldX& Data); 这

我正在实现一个不透明的数据结构,它在内部是一组不透明的数据结构。让我们称之为唱片。将有多个查询到记录的不同字段,每个字段具有相同的键。我有此表单的API列表:

QueryFieldX(KEY key, FieldX& Data)
每个查询当前都使用键搜索记录,然后获取数据

我想将其更改为以下形式:

GetHandleToRecord(KEY key, MYHANDLE handle);
QueryFieldX(MYHANDLE handle, FieldX& Data);

这样做的好处是消除了每次对记录的搜索。我自己可以实现MyHub句柄,但是我想知道C++中是否有一个好的库/数据结构/原语,这给了我一个不透明的句柄。我可以使用。

< P>句柄通常是一个模糊的数据指针,比如这个。
typedef void* MYHANDLE;
您可以根据需要显式地
重新解释\u cast
指针,例如在本代码中

MYHANDLE GetHandleToRecord(KEY key)
{
   FieldX *the_result;

   // (assign the correct pointer to the_result)

   return reinterpret_cast<MYHANDLE>( the_result );
}

QueryFieldX(MYHANDLE handle, FieldX& Data)
{
    Data = *reinterpret_cast<FieldX*>( handle )
}
MYHANDLE GetHandletoreRecord(按键)
{
FieldX*_结果;
//(将正确的指针指定给_结果)
返回reinterpret\u cast(结果);
}
QueryFieldX(MYHANDLE、FieldX和Data)
{
数据=*重新解释强制转换(句柄)
}

在您的例子中,句柄也可以是数组索引,或者是
std::map
的键。以后可以转换回数据本身的任何内容。

句柄通常是指向数据的模糊指针,如下所示

typedef void* MYHANDLE;
您可以根据需要显式地
重新解释\u cast
指针,例如在本代码中

MYHANDLE GetHandleToRecord(KEY key)
{
   FieldX *the_result;

   // (assign the correct pointer to the_result)

   return reinterpret_cast<MYHANDLE>( the_result );
}

QueryFieldX(MYHANDLE handle, FieldX& Data)
{
    Data = *reinterpret_cast<FieldX*>( handle )
}
MYHANDLE GetHandletoreRecord(按键)
{
FieldX*_结果;
//(将正确的指针指定给_结果)
返回reinterpret\u cast(结果);
}
QueryFieldX(MYHANDLE、FieldX和Data)
{
数据=*重新解释强制转换(句柄)
}

在您的例子中,句柄也可以是数组索引,或者是
std::map
的键。以后可以转换回数据本身的任何内容。

我希望记录也是不透明的。更新了问题返回数组索引,并将其提供给查询函数?数据结构将来可能不是数组。它可能是一棵树,也可能是一个哈希,句柄本身就是键。如果有人试图直接取消引用它,你不想使用指针?是的,这就是原因。我想,如果调用的代码中有handle=Encrypt(ptr)和ptr=decrypt(handle)这样的东西,我的目的就解决了。我可以在ptr周围有一个包装,并将其私有化,我认为这应该足够了。但是有更好的或者众所周知的方法吗?我也希望记录是不透明的。更新了问题返回数组索引,并将其提供给查询函数?数据结构将来可能不是数组。它可能是一棵树,也可能是一个哈希,句柄本身就是键。如果有人试图直接取消引用它,你不想使用指针?是的,这就是原因。我想,如果调用的代码中有handle=Encrypt(ptr)和ptr=decrypt(handle)这样的东西,我的目的就解决了。我可以在ptr周围有一个包装,并将其私有化,我认为这应该足够了。但是有更好的或众所周知的方法吗?如果我理解正确,他想要一个不能用来直接访问数据的句柄(排除指针),并且不是容器依赖的句柄(排除数组索引或std::map key)。如果我理解正确,他想要一个不能用来直接访问数据的句柄(排除指针),并且它不依赖于容器(排除了数组索引或std::map键)。