Existe-t-il un moyen de créer une fonction qui prend un conteneur avec un type spécifique (disons std::string
) comme paramètre
void foo(const std::container<std::string> &cont)
{
for(std::string val: cont) {
std::cout << val << std::endl;
}
}
et l'appeler pour chaque type de conteneur stl en entrée? comme ci-dessus?
std::set<std::string> strset;
std::vector<std::string> strvec;
std::list<std::string> strlist;
foo(strset);
foo(strvec);
foo(strlist);
c++
templates
stl
containers
chatzich
la source
la source
Réponses:
Vous pouvez créer
foo
un modèle de fonction en prenant un paramètre de modèle de modèle pour le type de conteneur.par exemple
VIVRE
la source
std::string
, alors ..Selon que vous souhaitez
foo
ou non surcharger d'autres casVous pouvez utiliser un autre test pour
std::is_same
, par exemple,std::is_convertible
autoriserla source
Vous voudrez peut-être envisager d'utiliser des itérateurs à la place. Un résultat intermédiaire peut ressembler à
Maintenant, en utilisant un modèle appelable:
Nous venons d'apprendre à utiliser ce que la STL propose déjà.
la source
Pour compléter la réponse de @ songyuanyao, je pense que nous pouvons la généraliser davantage:
la source