2013-06-10 4 views
0

이 문제에 적절한 이름을 찾을 수 없습니다.중첩 된 클래스 템플릿 문제

나는

class Array<T>::Iterator 

내가 함수 "종류"를 정의 할 중첩 된 반복자 클래스가 포함 된 템플릿 클래스 배열,이 :

template <typename T, class RAIterator> 
void sort(RAIterator start, RAIterator end); 

문제가입니다 g ++에서 T를 추론 할 수 없습니다 함수의 서명 나는 함수가 T를 지정의 독립을 원하기 때문에 (예를 들면 일종의 <T> (...)),이 (분명히 잘못) 구문에 대해 생각했다 :

template <typename T, class RAIterator<typename T>> 
void sort(RAIterator start, RAIterator end); 

이 실제로을 할 수있는 방법 컴파일러 그림 T 아웃?

+0

왜'sort'은'T'를 알아야 하는가? – juanchopanza

+0

힙 (힙 정렬 용)을 작성하기 위해. –

답변

4

당신은 당신의 반복자 클래스 내부 T의 타입 정의를해야한다, 당신은 당신의 정렬 함수 내에서이 액세스 할 수 있습니다

template <typename T> 
class Array{ 
    class Iterator{ 
     typedef T value; 
    } 
} 

template <class RAIterator> 
void sort(RAIterator start, RAIterator end){ 

    typename RAIterator::value &v=...; 
} 
+0

'sort'의 템플릿 매개 변수 목록에서'T'를 제거해야합니다. – juanchopanza

+2

iterator_traits에서 STL 반복자처럼 정의하면 안됩니까? –

+1

@ The-Q는 또 다른 접근 방식입니다. 나는 이것을 더 자연스럽게 찾는다. 그러나이 경우 두 가지 방법이 있습니다. – juanchopanza