2012-05-31 6 views
1
template<typename T> class A // template parameterization 
{ 
    private: 
     T t; 
    A(const T& v) : t(v) {} 
}; 

class B 
{ 
    template<typename T> 
    B(const T& v) 
    { 
     std::cout << v << std::endl; 
    } 
}; 

// usage of A and B 
A<int> a; 
B  b(10); 

질문> 어떤 상황에서 우리는 클래스 변수를 정의하기 위해 템플릿 매개 변수를 제공해야합니다. 예를 들어 우리는 클래스를 정의하기위한 템플릿 매개 변수를 제공해야합니까?

클래스 템플릿 부재 또는 변수를 포함하는 경우

???

당신은 클래스가 클래스 템플릿의 경우 인스턴스를 생성 템플릿 매개 변수를 제공해야

답변

3

주셔서 감사합니다. 귀하의 예에서는 class A이 클래스 템플릿이고 class B은 그렇지 않습니다.

클래스 템플릿 :

template <typename T> class A {}; 

하지 클래스 템플릿 :

당신의 예에서
class B { 
    // code may include function template, etc. 
    // but the class itself is not a class template 
}; 

, class B 템플릿 생성자를 가지고 있으며, 인수가에있는 전문화를 결정하기 위해 컴파일러에 의해 사용할 수 있습니다 하다. 리터럴 10int 때문에이 경우 그래서,

B(const int&); 

에 상당 생성자를 생성한다. 생성자는 함수와 같지 않으므로 컴파일러가 T이 무엇인지 파악할 수있는 경우에만 작동합니다. 자세한 내용은 this related question을 참조하십시오.

+0

+1 더 나은 단어를 조합 할 수 있습니다. 두 번째 경우에는 개체를 만드는 동안 형식을 지정하는 데 왜 필요하지 않은지에 대한 세부 정보를 추가 할 수 있습니다. 단, 생성자는 템플릿 함수 임에도 불구하고 지금 Q를보고 그것이 Q의 목적이라고 생각합니다. –

+0

@Als 편집에서 후자를 설명하려고했습니다. 컴파일러에게 T가 생성자의 경우에 무엇인지 알려 줄 수 없기 때문에 복잡합니다 ... – juanchopanza

+0

정확하고 OP가 이후 인 것처럼 보입니다. 나는 게시 한 후에 그것을 거의 깨달았지만 당신의 대답이 내 것보다 훨씬 낫고 세부 사항을 설명하는 것이 더 낫습니다. 단지 당신이 이미 내 +1을 가졌습니다. :) –

관련 문제