2013-06-10 2 views
0

Impossible de trouver un nom approprié pour ce problème.Problème de modèle de classe imbriqué

J'ai un tableau de classe modèle, qui contient une classe itérateur imbriqué

class Array<T>::Iterator 

Je veux définir une fonction « trier »: problème

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

est, g ++ ne peut pas déduire T de la signature de la fonction. Comme je veux que la fonction soit indépendante de la spécification T (par exemple type <T> (...)), je pensais à ce (évidemment faux) syntaxe:

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

est-il un moyen de laisser la réalité figure du compilateur T out?

+0

Pourquoi 'sort' besoin de savoir' T'? – juanchopanza

+0

Afin de créer un tas (pour le tri de tas). –

Répondre

4

Vous devriez faire un typedef de T dans votre classe iterator, vous pouvez accéder à cette fonction dans votre tri:

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

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

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

Vous devez supprimer 'T' de la liste des paramètres de modèle de' sort'. – juanchopanza

+2

Ne devrait-il pas être défini dans iterator_traits comme dans les itérateurs STL? –

+1

@ The-Q c'est une autre approche. Je trouve celui-ci plus naturel. Mais vous pouvez réellement l'avoir dans les deux sens dans ce cas. – juanchopanza

Questions connexes