インターネット上のどこかのC++ RTTIのないアイデンティティクラスに簡単な解決策が見つかりました。RTTIのないクラスID
template <typename T>
class Identity {
public:
static int64_t id()
{
static int64_t dummy;
return reinterpret_cast<int64_t>(&dummy);
}
};
我々はいくつかのクラスIDを必要とするとき、私達はちょうど使用:
Identity<OurClass>::id();
私は思ったんだけど、どんな衝突がありますか。異なるクラスの同じID、同じクラスの異なるIDを返すことはできますか?私はこのコードをg ++でさまざまな最適化値で試してみましたが、すべてがOKです。
、はい。関数ポインタが 'int'と同じサイズであるという保証はありません。 –
これは私の興味に関係しています... –
上記の問題を回避するには、静的メンバー関数テンプレートに静的 'int'変数を置き、* that *へのポインタを返す方が良いでしょう。コンパイラは、とにかく関数を最適化します。 – Electro