1

私は一生これを機能させることはできません。

既存のテンプレートがあります:

template <class T>
class MyTemplate;

今、私はそれを特殊化したいのですが、テンプレートであるクラス T の場合、2 番目のテンプレートをさらに特殊化することはありません。たとえば、次のようになります。

template <>
template <class T>
class MyTemplate<vector> { /*...*/ };

しかし、これ、および私が試した他のさまざまな構文はコンパイルできないようです。これの構文は何ですか?それとも可能ですか?そうでない場合MyTemplate、たとえば と の両方の一般化された特殊化を処理できるようにするための可能な代替手段はvectorありmapますか?

4

5 に答える 5

2

適切な構文は次のとおりです。

template < typename T>
class MyTemplate<vector<T> > { /*...*/ };
于 2012-06-19T07:35:48.577 に答える
2

私はあなたがこれを探していると思います:

template<typename T>
class MyTemplate {...}

template<typename T>
class MyTemplate<vector<T> > {...}

MyTemplate<vector<int> > x;上記では、 aとTisを作成するときに部分特殊化が使用されますint

于 2012-06-19T07:37:56.890 に答える
1

より一般的に

template<typename A, typename B> class MyTemplate;
template<typename C, typename D> class SomeTemplate;

template<typename A, typename C>
class MyTemplate<A, SomeTemplate<C,A> > { /* ... */ };
于 2012-06-19T07:39:52.120 に答える
0

クラスのテンプレートを定義するための構文がわかりません。あなたはそれを調べる必要があります。ただし、テンプレートの定義がすべてではありません。テンプレートごとにクラス定義を記述する必要があります。たとえば、x型の1つの引数を話し、y型の2つの引数を取るなどのクラス定義がある場合、それを処理するためのクラスが必要です。関数のオーバーロードと同じです。あなたは同じ関数名を持っていますが、それぞれが異なる引数を取ります。それぞれに関数を記述します。そして、その呼び出しは、引数リストに基づいて適切な関数を選択します。

したがって、...型ごとに定義することにより、さまざまなオブジェクトをソートするクラス。

于 2012-07-09T09:37:24.517 に答える
0

テンプレートは、次のいずれかの観点から定義できます。

  • 非型パラメータ (定数)
  • 型パラメータ
  • テンプレート パラメータ

そのように定義されると、特殊化はパラメーターの種類を尊重する必要があります。

したがって、型パラメータが期待される (テンプレートである) に特化したい場合は、(テンプレート化された) 型パラメータを作成するためにvectorのパラメータを綴る必要があります。vector

template <typename T, typename Alloc>
class MyTemplate < std::vector<T, Alloc> > {
};

についても同様ですmapが、さらに多くのパラメーターがあります。

template <typename K, typename V, typename C, typename A>
class MyTemplate < std::map<K, V, C, A> > {
};

そして、ここに行きます:)

于 2012-06-19T08:06:26.383 に答える