コンパイル時にクラスの派生型に基づいてクラスのハッシュを生成します。今日、私はそれが好きで生成:コンパイル時にC++タイプのID
template<class Type>
class TypeBase
{
public:
static const unsigned s_kID;
};
template<class Type>
const unsigned TypeBase<Type>::s_kID = hash(typeid(Type));
が、これが生成する(かなり不必要に)実行時の初期化コード(ハッシュ(..)関数は、STDに基づいて、単純なハッシュを行います::(名:: TYPE_INFO))
アイデア?
ハッシュの衝突が発生する危険性はありませんか、それとも問題ではないでしょうか? –
@アンドレアス:ハッシュを作成するとき、ハッシュエントリを持つマップもあります。したがって、衝突があるかどうかを確認できます。それに加えて、クラス数は20かもしれないので、私もそれで安全ですね。 – Robert
'id = ++ someGlobalCounter'のようなことはできませんか? –