2014-07-24 2 views
0

클래스의 다른 기능에 대해 템플릿의 매개 변수가 다를 수 있습니까? 예를 들어, I 클래스가 있다면 : 나는이 작업을 수행 할 수클래스의 다른 템플릿 매개 변수 사용

template <class T, class Comparator> 
class example { 
public: 
void shift(std::vector<T>& a, T low, T, high); 
void heapSort(std::vector<T>& a, T size, Comparator comp); 
}; 

오전 :

template <class T> 
void example::shift(std::vector<T>& a, T low, T, high) 

과 :

template <class T, class Comparator> 
void example::heapSort(std::vector<T>& a, T size, Comparator comp) 

시프트 기능은 비교기 유형을 필요로하지 않기 때문에?

+0

예, 'T'와 다른 문자를 사용하는 것이 더 읽기 쉽습니다. (원본 T와 새 템플릿 매개 변수를 모두 사용할 수 있습니다). –

답변

1

예, 당신은 단지 자신의 Comparator 템플릿 매개 변수로 heapSort 템플릿 기능을해야 heapSort의 정의에는 두 개의 template 행이 있습니다. 하나는 클래스 용이고 하나는 함수 용입니다. 그것은 템플릿 내의 템플릿입니다.

+0

이것은 효과가 있습니다. 나는 템플릿의 문법을 잘 이해하지 못한다. 감사! –

0

함수가 클래스 멤버에 액세스 할 수 있으며 템플릿 매개 변수에 따라 달라질 수 있으므로이 작업을 수행 할 수 없습니다. 사용되지 않는 매개 변수에 대해 더 짧은 이름을 사용할 수도 있고, 이름을 생략하고 '클래스'만 남겨 둘 수도 있습니다. 나는 당신이 실제로 원하는 같은데요

0

은 다음과 같습니다

template <class T> 
class example { 
public: 
    void shift(std::vector<T>& a, T low, T high); 

    template <class Comparator> 
    void heapSort(std::vector<T>& a, T size, Comparator comp); 
}; 

template <class T> 
void example<T>::shift(std::vector<T>& a, T low, T high) { 
    // ... 
} 

template <class T> 
template <class Comparator> 
void example<T>::heapSort(std::vector<T>& a, T size, Comparator comp) { 
    // ... 
} 

참고한다 :

template <class T, class Comp1> 
class example { 
public: 
    void shift(std::vector<T>& a, T low, T, high); // uses Comp1 

    template<class Comp2> 
    void heapSort(std::vector<T>& a, T size, Comp2 comp); 
}; 
+0

실제로 하나의 함수 (시프트 함수)는 comp 매개 변수를 사용하지 않으므로 혼란 스럽습니다. heapSort 함수에만 Comparator 객체가 필요합니다. 그렇다면 모든 함수를 템플릿으로 처리해야합니까? –

+0

템플릿 매개 변수를 잘못 이해했다고 생각합니다. 'T'와'Comp1'은 예제 **의 매개 변수 **입니다. 즉, 나중에 사용하면'example '입니다. 'example '의 멤버는'T'와'Comp1'에 접근 할 수 있습니다. 그들이 원하지 않으면 사용할 필요가 없습니다. 그러나'Comp2'는'heapSort'의 매개 변수 일뿐입니다. 즉, 예제는 :: heapSort 입니다. –

+0

Comp1은 무엇을 위해 사용됩니까? –

관련 문제