J'essaie de faire une fonction d'impression dans Toutefois, si Cependant, je reçois une erreur MSVC C2768: " C ++ code> qui prend des nombres variables d'arguments et les imprime chacun de leur propre ligne, comme:
ty code> se trouve être un
std :: vecteur
'println': utilisation illégale d'arguments de modèle explicite code>" .
Toute suggestion ou solutions serait chaleureusement accueillie! Pour référence, j'utilise Visual Studio 2019 Aperçu et sa version correspondante du compilateur. P> p>
3 Réponses :
Un moyen plus simple serait d'avoir une fonction d'impression et une surcharge que:
Vous ne pouvez pas particulaliser partiellement un modèle de fonction, mais vous pouvez la surcharger. Créez une nouvelle surcharge de println code> qui prend un
std :: vecteur
Vous pouvez le faire comme ceci:
/* main.cpp */ #include <iostream> #include <vector> #include <string> using namespace std; template <class T> void PrintLine(const T &t) { cout << t << endl ; } template <class T> void PrintLine(const vector<T> &t) { for(auto &obj : t ) PrintLine(obj); } template <class ... TT> void PrintLines(const TT & ... tt) { ( PrintLine(tt) , ... ); } /* main() */ int main() { vector<string> list{"a","b","c"}; PrintLines(1,2,3,list); return 0; }
Les modèles de fonctions ne peuvent pas être partiellement spécialisés, période. Vous aurez besoin de la magie de type définie par l'utilisateur pour l'effet requis.
@Tanveerbadar CPPRAFERATION SUR SPÉCOFISATION PARTIELLE
Oui, mon point aussi. Vous essayez de le faire pour fonctionner. Ce n'est pas pris en charge.