2

명시 적으로 C++ 템플릿을 부분적으로 인스턴스화 할 수 있습니까?C++ 템플릿 부분 명시 적 인스턴스화

template class <typename T, int N> 
class MyClass { 
    ... 
}; 

template<int N> class MyClass<int, N>; // not meant for specification 
template<int N> class MyClass<float, N>; 

단지 우리가 할 수 있습니다와 같은 :

template class <typename T> 
class MyClass { 
    ... 
}; 

template class MyClass<int>; 
template class MyClass<float>; 

답변

5

템플릿 클래스가 아닙니다. 그것은 템플릿입니다. (청사진은 수업을 만드는 것입니다.) 모든 템플릿 매개 변수가 고려 될 때만 클래스가 될 수 있습니다. 꼭

template <typename T, int N> 
class MyClass { 

}; 

당신은 할 수있다이 수행 :

이 (오타 수정) 작성하는 데

template<int N> class MyClass<int, N>; 
template<int N> class MyClass<float, N>; 

을하지만 (즉, 아무런 의미가 없기 때문에),도 템플릿을 인스턴스화하지 않습니다 그 템플릿으로 형성된 구체적인 클래스를 인스턴스화하는 것입니다. 그것이 실제로하고있는 것은 템플릿의 부분적으로 (아마도 무한한) 부분 집합의 존재를 선언하는 것입니다.

또한이 작업을 수행 할 수 있습니다 <int, [all values of N]><float, [all values of N]>에 대한 MyClass 부분적으로 전문

template<int N> class MyClass<int, N> {}; 
template<int N> class MyClass<float, N> {}; 

합니다.

그러나이 템플릿 하위 집합은 여전히 ​​인스턴스화되지 않습니다. 단지 으로 정의됩니다.

템플릿을 실제로 인스턴스화하려면 부분 템플릿인지 여부에 관계없이 모든 템플릿 인수를 고려하여 이름을 지정해야합니다.

관련 문제