C ++中的不透明句柄

时间:2013-03-15 22:03:28

标签: c++

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

QueryFieldX(KEY key, FieldX& Data)

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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的键。以后可以将任何东西转换回数据本身。