0

C ++で単純なハッシュテーブルを作成しようとしています。私のハッシュテーブル実装テンプレートは次のようになります。

template<class k, class v, class h<k>, class e<k> >
class my_hash {


};

ここで、
k = キーのクラス タイプ
v = 値のクラス タイプ
h = ハッシュ fn の
クラス タイプ e = 等価 fn のクラス タイプ

このようにクラス h を定義しました

template<class k>
class h {


};

上記のテンプレートを、int、string などのさまざまな k タイプに特化します。k で my_hash テンプレートを呼び出すたびに、自動的に

h<k>

ハッシュ関数タイプとして。これが起こるには、テンプレートをどのように定義しますか?

上に示したように定義すると、g++ は h がテンプレートではないというコンパイラ エラーを返します。誰かがこれを手伝ってくれませんか?

4

2 に答える 2

2

あなたが必要とするのはテンプレートテンプレートパラメータと呼ばれるもので、これは次のとおりです。

template<class k, class v, template<typename> class h, template<typename> class e>
class my_hash 
{
  //then here you can intantiate the template template parameter as
  h<k> hobj;
  e<k> eobj;
  //...
};

これで、上記のクラス テンプレートの 3 番目と 4 番目のテンプレート引数として、クラス テンプレート (1 つの型引数を取る) を渡すことができます。本またはオンラインでテンプレート テンプレート パラメータを探し、詳細を確認してください。ここから開始できます。

それが役立つことを願っています。

于 2013-04-04T04:42:09.317 に答える