나는 다음과 같은 클래스가 :나는 /이 템플릿 유형에 대한 템플릿 함수를 오버로드 전문 수있는 방법
template <>
container<int>::container() {
std::cout << "int constructor" << std::endl;
}
:
template <class... T>
class thing {};
template <class T>
class container {
public:
container() {
std::cout << "normal constructor" << std::endl;
}
};
내가 이런 식으로 container<int>
의 생성자에 대한 전체 전문화를 쓸 수를
container<thing<T>>
에 대해 비슷한 생성자를 정의하고 싶습니다. 나는 내가 무엇을 쓰기를 시도하고있어 템플릿 기능의 부분 특수화 생각 여기에 내가 시도하고있는 무슨이다 (불법입니다.) :
template <class T>
container<thing<T>>::container() {
}
이 컴파일되지 않습니다.
이 문제를 해결하는 올바른 방법은 무엇인지, 템플릿 클래스 기능에 대한 과부하와 특수화 사이의 경계가 흐려지는 지 잘 모르겠습니다. 이 문제를 쉽게 해결할 수 있습니까? 아니면 type_traits (std::enable_if
)가 필요합니까? 이 문제를 어떻게 해결할 수 있습니까? 당신은 부분적 할 수 없습니다
매우 세련된 솔루션 (IMHO) – max66
@ max66 감사합니다. 전체 클래스를 부분적으로 특수화하면 코드 중복이 발생할 수 있으므로 가능한 한 피하려고합니다. – skypjack
@ max66 _specialized_ 생성자가 여러 개인 경우에 대한 자세한 정보가 추가되었습니다. 네가 그걸 좋아하기를 바란다. ;-) – skypjack