我正在实现一个内部不透明数据结构数组的不透明数据结构。我们称它们为记录。将对记录的不同字段进行多次查询,每个查询都具有相同的键。我有一个这种形式的 API 列表:
QueryFieldX(KEY key, FieldX& 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
的键。以后可以转换回数据本身的任何内容。
关于c++ - C++ 中的不透明句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15442799/