2011-09-23 3 views
1

템플리트 함수에 대한 간단한 예제로 작업합니다. 코드가 컴파일되어 예상대로 작동합니다. 하지만 제 질문은 "정적"이 "Cmp"와 "조명"에서 모두 필요한 이유입니다. 그렇지 않으면 컴파일되지 않습니다.템플리트 함수가 템플리트 인수를 취함

고마워요!

return C::work(a, b); 

C::work(a, b) 여기에 의미 구문 "클래스 C 안에 중첩 기능 work 전화 :

template<class T> class Cmp{ 
public: 
    static int work(T a, T b) { 
     std::cout << "Cmp\n"; 
     return 0; 
    } 
}; 

template<class T> class Lit{ 
public: 
    static int work(T a, T b){ 
     std::cout << "Lit\n" ; 
     return 0; 
    } 
}; 

template<class T, class C> 
int compare(const T &a, const T &b){ 
    return C::work(a, b); 
} 


void test9(){ 
    compare<double, Cmp<double> >(10.1, 20.2); 
    compare<char, Lit<char> >('a','b'); 
} 
+0

함수와 함수 템플릿을 사용하여 클래스를 사용하지 않고 모든 것을 표현할 수 있습니다. –

답변

1

static 여기에 필요하다는 이유는 compare 템플릿 함수에,이 라인을 가지고있다. 일반적으로 이것은 리시버 객체를 제공하지 않고 멤버 함수를 호출하려고 시도합니다. 즉, 일반적으로 함수를 호출하는 방법은

입니다.210
C myCObject; 
myCObject.work(a, b); 

그러나이 경우 멤버 함수를 호출하고 싶지는 않습니다. 대신에 우리는 함수 work을 일반 함수와 비슷하게 만들어서 다른 어떤 객체에 상대적으로 작용하지 않고 언제든지 호출 할 수 있기를 바랍니다. 결과적으로 우리는 이러한 함수를 static으로 표시하여 정규 함수처럼 호출 할 수 있습니다.

희망이 도움이됩니다.

3

C::work(a, b)C의 정적 멤버 함수 work()을 명명합니다.

관련 문제