:テンプレートの特殊化とC++テンプレートの部分特殊化構文
template<typename A, typename B> class MyClass {...
、
template<typename A, typename B> class MyClass<int, float> {...
と
template<> class MyClass<int, float> {...
:テンプレートの特殊化とC++テンプレートの部分特殊化構文
template<typename A, typename B> class MyClass {...
、
template<typename A, typename B> class MyClass<int, float> {...
と
template<> class MyClass<int, float> {...
template<typename A, typename B> class MyClass<int, float> {...
の違いは何許可されていないする必要があります。実際に、仮パラメータA
とB
を指定する場合は、テンプレートでそれらを使用する必要があります。
2番目のケースはちょうど正常です。つまり、「空き」パラメータなしで特殊化を行っているとします。
中間ケースは再び有効になり
template<typename A> class MyClass<A, float> {...
次のようになります。ここであなただけの第二のテンプレートパラメータを固定しています。
部分的な特殊化の考え方は、いくつかの仮パラメータを使用してテンプレートを作成し、初期テンプレートのパラメータに制約を表すために使用します。部分的特殊化のパラメータは、初期テンプレートパラメータと同じである必要はありません。例:
template<typename X, typename Y, typename Z> class MyClass<X*, Y(Z&)> {...
は、あなたのケースに対して有効な部分的な専門用語です。これは、X
、Y
、Z
の場合、MyClass
のテンプレートパラメータがと一致し、Y(Z&)
の場合は、この特殊化を使用してください。コンパイラは型パターンにマッチするためにはかなり巧妙でなければなりません。
ここから:http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/partial_specialization.htm私は 'template struct X {..' –
uray
@uray:はい、この場合、テンプレートパラメータを使用しています。 – Vlad
2番目の引数 'template class MyClass 'の最初のテンプレートを修正するにはどうすればよいですか? –
uray