J'ai une fonction qui doit recevoir soit une std::list
soit un std::vector
d'objets MyClass *
et effectuer tout un tas de traitements en fonction de ce qui se trouve à l'intérieur. Je ne veux pas dupliquer le corps de la fonction.
J'ai juste besoin d'utiliser ces objets pour les parcourir et effectuer quelques vérifications en lecture seule.
Je pensais passer directement les itérateurs .begin()
et .end()
, mais cela ne semble pas très joli du tout.
Y a-t-il un moyen meilleur de contourner cela, actuellement j'ai la solution suivante (qui crée une autre liste à partir du vecteur passé, ce qui n'est guère idéal non plus).
void process(std::list input)
{
//Beaucoup de traitements
BOOST_FOREACH(MyClass* itMyClass, input)
{
//quelques vérifications, création d'une nouvelle liste basée sur les vérifications
}
//Beaucoup de traitements
}
void process(std::vector input)
{
process(std::list(input.begin(), input.end()));
}
EDIT:
Il semble que beaucoup de personnes suggèrent finalement d'utiliser begin()
et end()
, j'ai réussi à le faire fonctionner de manière similaire à l'exemple ci-dessous. Merci pour votre aide.
//Celui-ci est privé
template
void process(Iterator begin, Iterator end)
{
//Beaucoup de traitements
for (; begin != end; ++begin)
{
//quelques vérifications, création d'une nouvelle liste basée sur les vérifications
}
//Beaucoup de traitements
}
void process(std::list input)
{
process(input.begin(), input.end());
}
void process(std::vector input)
{
process(input.begin(), input.end());
}