2010-08-13 4 views
0

은 내가 더 잘 내 .H에서 다음과 같이 시작하는 템플릿 클래스가전달 템플릿

을 템플릿을 이해하려고 노력하고 매개 변수 수행

CPLAT::CP_DocumentPolicy_None * d = new CPLAT::CP_DocumentPolicy_None(); 
CPLAT::CP_PrintPolicy_None * p = new CPLAT::CP_PrintPolicy_None(); 
CPLAT::CP_UndoPolicy_None * u = new CPLAT::CP_UndoPolicy_None(); 

CPLAT::CP_Application::Init(d, p, u); 

을 내가 CPLAT에 오류가 발생 :: CP_Application :: 초기화 (D, P, U); 그 상태 :

오류 : 템플릿 매개 변수

어떻게 하나 개의 패스 템플릿 매개 변수없이 사용 '템플릿 클래스 CPLAT :: CP_Application'를?

답변

0

나는 그것이 당신은 클래스 템플릿 아닌 "템플릿 클래스"가

CPLAT::CP_Application<CPLAT::CP_DocumentPolicy_None,CPLAT::CP_PrintPolicy_None,CPLAT::CP_UndoPolicy_None>::Init(d,p,u); 
0
  1. 작동합니다 생각합니다. 클래스를 생성 할 수있는 템플릿입니다. (또한 기능 템플릿있다. 이러한 기능은 생성되는 템플릿이다.)

  2. 형태 파라미터 걸린다. d, pu은 유형이 아닌 객체에 대한 포인터입니다. 유형은 예를 들어 CPLAT::CP_DocumentPolicy_None, CPLAT::CP_PrintPolicy_NoneCPLAT::CP_UndoPolicy_None입니다.
    그래서 당신은 템플릿 매개 변수는 또한

    CP_Application< CPLAT::CP_DocumentPolicy_None 
           , CPLAT::CP_PrintPolicy_None 
           , CPLAT::CP_UndoPolicy_None > app; 
    
  3. 당신은 함수 템플릿이, 기능 (그들은 함수의 인수 목록 유형으로 표시), 당신이 그들을 생략 할 수 있습니다 매개 변수를 할 수 있어야 템플릿을 인스턴스화 할 때 실제 템플릿 인수 목록에 :

    template< typename T > 
    void f(T obj) {...} 
    ... 
    f(42); // same as f<int>(42), because 42 is of type int 
    

    이것은 자동 함수 인수 공제입니다.

  4. Init 멤버 함수를 호출 할 필요없이 생성자가 개체를 초기화하도록하십시오.

관련 문제