我正在实现一个不透明的数据结构,它在内部是一个不透明的数据结构数组。我们称他们为记录。对具有相同密钥的记录的不同字段将存在多个查询。我有这种形式的API列表:
QueryFieldX(KEY key, FieldX& Data)
每个查询当前使用密钥搜索记录,然后获取数据。
我想将其更改为以下格式:
GetHandleToRecord(KEY key, MYHANDLE handle);
QueryFieldX(MYHANDLE handle, FieldX& Data);
优点是消除了每次通过记录的搜索。我自己可以实现一个MYHANDLE,但我想知道C ++中是否有一个好的库/数据结构/原语给了我一个不透明的句柄,我可以使用它。
答案 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
的键。以后可以将任何东西转换回数据本身。