1

ある種のコンテナがあり、オブジェクトはそれを使用してデータの一部を保存できます。格納された各オブジェクトには、ID が必要です。MY_GL_CONTEXT、FUNNY_CONF_OBJECTなど。これらの識別子を使用するオブジェクトに分散して保存したいと思います。例: クラス Model のオブジェクトは、ID MY_GL_CONTEXT を使用してそこにデータを格納したいと考えています。

クラス間の競合を避けるために、これらの ID にどのような型を使用すればよいか知りたいです。static const int を使用すると、 Object::MY_GL_CONTEXT が Something::FUNNY_CONF_OBJECT と同じ int 値を持つため、コンテナを使用すると衝突する可能性があります。

ありがとうございました。

4

2 に答える 2

2

C++ には、いくつかの固有のものがあります。

各オブジェクトには固有のアドレスがあります。にキャストするvoid*と、等しいかどうかを比較できます。オブジェクトが異なればアドレスも異なるため、これが使用可能な ID になります。

各ポリモーフィック タイプには、 を介して取得できる独自のランタイム タイプ情報がありtypeidます。これは、経由で注文されstd::type_info::beforeます。

const int個別にコンパイルされるため、値が一意であることを保証することは事実上不可能です。実際、個別のコンパイルにより、2 つの .cpp ファイルを同時にコンパイルできます。intあるコンパイラは、他のコンパイラが選択する値をどのように知ることができますか?

于 2013-10-25T11:26:49.220 に答える
1

共有.hファイルを作成し、そこにさまざまな値を定義します。これにより、重複した値を簡単に見つけることができます (順序を維持している限り)。必要なすべての場所にそのファイルを含めます。

// To avoid duplication
#ifndef CONSTANTS   
#define CONSTANTS
#define MY_GL_CONTEXT 1
#define FUNNY_CONF_OBJECT 2
...
#endif
于 2013-10-25T09:52:24.327 に答える