2013-06-10 3 views
0

Не удалось найти подходящее имя для этой проблемы.Вложенный шаблон шаблона шаблона

У меня есть класс шаблона массив, который содержит вложенный класс итератора

class Array<T>::Iterator 

Я хочу, чтобы определить функцию «вид»:

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

проблема, г ++ не может вывести Т из подпись функции. Так как я хочу, чтобы функция не зависит от определения Т (например, рода <T> (...)), я думал об этом (очевидно, неправильно) Синтаксис:

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

есть способ на самом деле пусть компилятор?

+0

Почему 'sort' нужно знать' T'? – juanchopanza

+0

Чтобы создать кучу (для сортировки кучи). –

ответ

4

Вы должны ЬурейеЕ Т внутри класса итератора, то вы можете получить доступ к этому внутри функции сортировки:

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

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

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

Вы должны удалить 'T' из списка параметров шаблона' sort'. – juanchopanza

+2

Разве это не должно быть определено в iterator_traits, как в итераторах STL? –

+1

@ The-Q - это еще один подход. Я считаю это еще более естественным. Но в этом случае вы можете иметь это в обоих направлениях. – juanchopanza

Смежные вопросы