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.