template <typename T, typename U>
struct A {
void Print() {}
};
template <>
void A<int, float>::Print() {} // Okay
template <typename T>
void A<T, char>::Print() {} // Will produce error
質問:
私はあなたがそれを動作させるために上記のコードでクラステンプレート部分的な特殊化を定義する必要があり、私もThe members of the class template partial specialization are unrelated to the members of the primary template (§ 14.5.5.3)
その標準から知っていることを知っています。しかし、なぜExplosationの専門化と部分的な専門化の間の構文の違いはありますか?
"クラステンプレートの関数自体が関数テンプレート" - クラスの外部で定義されたクラステンプレートのメンバ関数は、*関数テンプレートのように定義されます。しかし、彼らは本当に同等ですか? –
@Jesse no彼らは同等ではありません。クラステンプレートのメンバ関数の "templatiness"を記述する用語はありません。それらは関数テンプレートではありません。一部の人々はそれらを「テンプレート」と呼びます。対応する問題はhttp://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1253です。 –
@ JohannesSchaub-litb:説明をいただきありがとうございます。うまくいけば、活発な問題の説明がすぐに追加されることを願っています。 –