c++ - C++ 中的不透明句柄

标签 c++

我正在实现一个内部不透明数据结构数组的不透明数据结构。我们称它们为记录。将对记录的不同字段进行多次查询,每个查询都具有相同的键。我有一个这种形式的 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/

相关文章:

c++ - 如何使用pugixml解析获取具有相同节点名称的节点的节点数据?

c++ - 初始化后无法更改 C++ 变量

c++ - 如何克服 Bitset 错误

c++ - 将数组中的某些整数相加

c++ - 是否有没有未定义行为的 C++ 安全版本?

c++ - 仅当程序处于焦点时退出循环的关键监听器(c++)

c++ - QGLWidget 中的 makeCurrent() 在哪里使用?

Android - 调用 System.loadLibrary() 导致进程终止

c++ - 你如何删除 OpenCV 中的 cvseq?

c++ - 如何引用与 C++ 中的局部变量同名的全局变量?