예 :명시 적 특수화와 부분 전문화의 구문이 다른 이유는 무엇입니까?
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"를 설명하는 용어는 없습니다. 그것들은 함수 템플릿이 아닙니다. 어떤 사람들은 그들을 "temploid"라고 부릅니다. 해당 문제는 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1253 –
입니다. @ JohannesSchaub-litb : 해명 해 주셔서 감사합니다. 잘하면 활성 문제에 대한 설명이 곧 추가됩니다. –