Déclarer une fonction acceptant un iterator générique

Étant donné ce code, est-il possible de changer dumpSsortingngs() pour pouvoir itérer sur n’importe quel conteneur de ssortingng , comme par exemple une list ?

 #include  #include  #include  #include  using namespace std; void dumpSsortingngs(vector::iterator it, vector::iterator end) { while (it != end) { cout << *it++ << endl; } } int main() { vector strVector; strVector.push_back("Hello"); strVector.push_back("World"); dumpSsortingngs(strVector.begin(), strVector.end()); return 0; } 

Créer un modèle

 template void dumpSsortingngs(iterator_type it, iterator_type end) { while (it != end) { cout << *(it++) << endl; } } 

Le modèle supprime également la limite du type de valeur de conteneur en chaîne. Notez que vous avez besoin des parenthèses autour du it ++.

Je ne pense pas qu’il y ait quelque chose d’aussi simple que vous voudriez. Idéalement, vous pourriez faire quelque chose comme

 void dumpSsortingngs(AbstractIterator beg, AbstractIterator end) { } 

mais les iterators du TSL ne semblent pas avoir de hiérarchie d’inheritance, assez irritant. Il semble donc que vous ayez à vous en servir avec des modèles de fonctions – c’est comme cela que se passe dans la bibliothèque d’algorithmes STL .

Désolé, j’aimerais qu’il y ait un meilleur moyen aussi, mais cela devra être fait. N’oubliez pas de déclarer le modèle de fonction complet dans le fichier d’en-tête!

S’il vous plaît essayez ceci, cela fonctionnerait dans tous les conteneurs:

 template void disp(T &t) { for( auto itr=t.begin();itr!=t.end();itr++) cout<<*itr< v(3,77); list l(5,"Hello"); disp(l) disp(v); 

Remarque: N’oubliez pas d’inclure < ssortingng >,
Et auto est disponible en c ++ 11