答えて

6

template<typename A, typename B> class MyClass<int, float> {...の違いは何許可されていないする必要があります。実際に、仮パラメータABを指定する場合は、テンプレートでそれらを使用する必要があります。

2番目のケースはちょうど正常です。つまり、「空き」パラメータなしで特殊化を行っているとします。

中間ケースは再び有効になり

template<typename A> class MyClass<A, float> {... 

次のようになります。ここであなただけの第二のテンプレートパラメータを固定しています。

部分的な特殊化の考え方は、いくつかの仮パラメータを使用してテンプレートを作成し、初期テンプレートのパラメータに制約を表すために使用します。部分的特殊化のパラメータは、初期テンプレートパラメータと同じである必要はありません。例:

template<typename X, typename Y, typename Z> class MyClass<X*, Y(Z&)> {... 

は、あなたのケースに対して有効な部分的な専門用語です。これは、XYZの場合、MyClassのテンプレートパラメータがと一致し、Y(Z&)の場合は、この特殊化を使用してください。コンパイラは型パターンにマッチするためにはかなり巧妙でなければなりません。

+0

ここから:http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/partial_specialization.htm私は 'template struct X {..' – uray

+0

@uray:はい、この場合、テンプレートパラメータを使用しています。 – Vlad

+0

2番目の引数 'template class MyClass 'の最初のテンプレートを修正するにはどうすればよいですか? – uray

関連する問題