1

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

QueryFieldX(KEY key, FieldX& Data)

每个查询当前使用键搜索记录,然后获取数据。

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

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

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

4

1 回答 1

1

句柄通常是指向数据的模糊指针,例如this。

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. 以后可以转换回数据本身的任何内容。

于 2013-03-15T22:09:52.937 回答