Comment écrire une fonction modèle qui fonctionne sur un conteneur arbitraire de type arbitraire? Par exemple, comment puis-je généralise cette fonction facticeModèle de modèle Fonction C++
template <typename Element>
void print_size(const std::vector<Element> & a)
{
cout << a.size() << endl;
}
à
template <template<typename> class Container, typename Element>
void print_size(const Container<Element> & a)
{
cout << a.size() << endl;
}
Voici une utilisation typique
std::vector<std::string> f;
print_size(f)
Cette erreur donne
tests/t_distances.cpp:110:12: error: no matching function for call to ‘print(std::vector<std::basic_string<char> >&)’. I'm guessing I must tell the compiler something more specific about what types that are allowed.
Quelle est cette variante de l'utilisation de modèle appelé et comment puis-je résoudre ce problème?
Et si vous avez besoin du type "contenu"? Comme si vous vouliez créer une fonction qui vous donne une std :: map de deux std :: vector (une pour les clés, l'autre pour les valeurs). Mais vous pouvez utiliser autre chose que std :: vector comme une classe personnalisée avec les itérateurs begin() et end(). – ibizaman
@ibizaman Voilà ce à quoi servent les typendefs. Utilisez simplement 'typename Container :: value_type' (notez le préfixe' typename', c'est important, il y a d'autres questions qui expliquent pourquoi). –
est ce standard value_type? Eh bien, je sais que c'est dans la stl pour std :: vector et ainsi de suite, mais est-ce la façon reconnue de le faire pour les classes personnalisées? – ibizaman