함수 템플릿에 대해 질문 드립니다.
희미해
2023.04.01
Effective C++ P177에
namespace std{
templatetypename T
void swap WidgetT (WidgetT& a, WidgetT& b)
{ a.swap(b); }
}
[C++는 클래스 템플릿에 대해서는 부분 특수화를 허용하지만
함수템플릿에 대해서는 허용하지 않도록 정해져 있습니다.]
라는 구문이 있는데요.
위의 코드가 적법하지 않은 코드인 이유를 설명하기 위한 구문입니다.[1] 템플릿 완전특수화와 부분특수화는 어떤 차이가 있나요?
[2] 클래스 템플릿에 대해서는 부분 특수화를 허용하고, 함수 템플릿에
대해서는 허용하지 않는다는 것이 무슨 뜻인가요?
구문의 뜻을 모르니, 위의 코드가 왜 유효하지 않은지 모르겠습니다.
= 함수 템플릿에서 매개변수인 해당 클래스 템플릿에 대해 특수화를 허용하지 않는다는 뜻인가요?
그러니까 함수 템플릿을 만들때, 템플릿의 매개변수는 클래스는 되고 클래스 템플릿은 안된다는 말인가요?
[3] 만약 완전특수화와 부분특수화가 차이가 없다면 위의 코드는
templatetypename T 가 아니라 template 라고 해야 하지 않나요?