11

私はおそらくばかげたことをしているが、それがうまくいったらいいのにと思う。

本質的にグローバルな(ただし、理想的にはクラス変数としてカプセル化された)独自のルックアップ構造が必要な方法で型を特殊化しようとしていますが、オブジェクトを型に対して安全にしたいので、パラメーター化されています。

その結果、私は本質的に

template<class T, int N>
class SpecialArray
{
//...
private:
   static map<string, internal_t> lookupTable
}

どういうわけか、lookupTableを初期化するときまで、私はそうは思いませんでした。

template <class T, int N>
SpecialArray<T,N>::lookupTable;

lookupTableのさまざまなインスタンス化に関連付けられて、さまざまなが実行されますSpecialArray

それは単なる夢のようなものであり、正解はそれを別個のグローバルシングルトンオブジェクトにすることだと思いますが、とにかくlookupTable、すべてのオブジェクトに対して1つだけになるようにすることはできSpecialArrayますか?

たとえば、私の頭の中のC ++(実際のC ++ではありません)では、これは次のようになります。

template <class T, int N>
SpecialArray<*,*>::lookupTable;

...しかし悲しいことに、GCCは私の心の中でC++をコンパイルしません

私が欲しいものを手に入れる実際の方法はありますか(C ++ 0x-landか何かのどこか)?このルックアップテーブルを操作するいくつかの静的メソッド(タイプまたはNを追跡しない)でも、この問題が発生する可能性があります。

...それが意味をなさなかった場合は申し訳ありません。

あなたがレンダリングすることができるどんな助けまたは同情にも前もって感謝します。

4

2 に答える 2

22

テンプレート化されていない基本クラスを追加して、lookupTableそのクラスに移動できます。

class Base
{
protected:
    static map<string, internal_t> lookupTable
};

template<class T, int N>
class SpecialArray : Base
{
    //...
};
于 2010-07-07T20:04:46.723 に答える
0

それらをグローバルにするだけで、心配する必要はないようです。おそらく、名前空間を使用することがあなたが望むものですか?

于 2010-07-07T19:49:53.997 に答える