Bonjours à tous,
voici quatre ans que je développe exclusivement C#. J'ai aujourd'hui un projet à réaliser en C++, le retour n'est pas aussi facile que cela.
Voici mon problème:
J'ai défini une classe dont une méthode doit me retourner "un tableau de chaines de caractères". Voulant conserver une certaine généricité je souhaite retourner un iterateur de chaine de caractères afin de m'affranchir du type de conteneur. Je n'ai ici besoin que de pouvoir énumérer dans une boucle type foreach l'ensemble des chaines.
J'ai donc le prototype suivante:
que je chercher à implémenter:
Code : Sélectionner tout - Visualiser dans une fenêtre à part virtual std::iterator<std::input_iterator_tag, std::string> MaMethode()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 std::iterator<std::input_iterator_tag, std::string> MaMethode() { std::vector<std::string> *result = new std:vector<std::string>(); result->push_back(std::string("Test1")); result->push_back(std::string("Moi")); return result->begin(); }
- Cela ne compile pas. J'ai un message m'indiquant que ce que retourne std::vector::begin() ne peut être casté en std::iterator<std::input_iterator_tag, std::string>. Soit. Comment dans ce cas définir ma méthode pour tirer partie de la généricité des itérateurs et pouvoir retourner celui sur mon tableau?
- Se pose ensuite la question du nettoyage: il n'y a pas de garbage collector en C++. Quel design adopter pour s'assurer que mon std::vector result sera détruit ou puisse etre détruit par l'appelant de ma méthode MaMethode?
Merci de m'aider à clarifier tout cela dans ma petite tête,
Neilos
Partager