1

内部的に不透明なデータ構造の配列である不透明なデータ構造を実装しています。それらをレコードと呼びましょう。それぞれが同じキーを持つレコードの異なるフィールドへの複数のクエリがあります。この形式の API のリストがあります。

QueryFieldX(KEY key, FieldX& Data)

各クエリは現在、キーを使用してレコードを検索し、データを取得します。

以下の形に変更したいと思います。

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

利点は、レコードを毎回検索する必要がないことです。自分で MYHANDLE を実装できますが、使用できる不透明なハンドルを提供する C++ の優れたライブラリ/データ構造/プリミティブがあるかどうかを知りたいです。

4

1 に答える 1

1

ハンドルは通常、このようなデータへの難読化されたポインターです。

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 に答える