c++中的不透明句柄

Opaque Handle in C++

本文关键字:句柄 不透明 c++      更新时间:2023-10-16

我正在实现一个不透明的数据结构,它内部是一个不透明数据结构数组。我们称它们为记录吧。对记录的不同字段会有多个查询,每个字段都有相同的键。我有一个这种形式的api列表:

QueryFieldX(KEY key, FieldX& Data)

每个查询当前使用键搜索记录,然后获得Data。

我想把它改成如下格式:

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

优点是避免了每次都通过记录进行搜索。我可以实现一个MYHANDLE自己,但我想知道是否有一个好的库/数据结构/原语在c++中,给我一个不透明的句柄,我可以使用。

句柄通常是一个模糊的指向数据的指针,例如:

typedef void* MYHANDLE;

您可以根据需要显式地将指针reinterpret_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 )
}

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