Je suis actuellement bloqué en trouvant la syntaxe correcte pour ajuster chaque chaîne dans un vecteur std ::.boost :: rogne chaque chaîne dans std :: vector <std::string>
J'ai essayé
std::vector<std::string> v;
std::for_each(v.begin(), v.end(), &boost::trim);
qui m'a donné les messages d'erreur suivants dans MSVC7.1.
erreur C2784: '_Fn1 std :: for_each (_init, _init, _Fn1)': ne pouvait pas déduire argument de modèle pour 'T1' de 'std :: vecteur < _Ty> :: itérateur' avec [_Ty = std :: string]: voir la déclaration de 'std :: for_each'
erreur C2896: '_Fn1 std :: for_each (_InIt, _InIt, _Fn1)': impossible d'utiliser le modèle de fonction 'void boost :: algorithm :: trim (SequenceT &, const std :: locale &) » comme argument de la fonction: voir la déclaration de 'boost :: algorithme :: trim'
Si je donne explicitement le paramètre de modèle trims second paramètre ne peut pas être trouvé par le compilateur, bien qu'il soit défini par défaut.
std::for_each(v.begin(), v.end(), &boost::trim<std::string>);
erreur C2198: 'void (__cdecl *) (std :: string &, const std :: locale &)': trop peu d'arguments pour l'appel par pointeur à la fonction
Je me demandais comment la syntaxe correcte pour appeler trim pour chaque élément dans v
ressemblerait.
Notez également que 'for_each' ne sert pas à modifier les séquences d'origine. Utilisez 'transform' à la place. –
Mauvais, for_each est parfait pour ce qu'il fait. Gardez à l'esprit que boost :: trim renvoie void, ce qui signifie qu'il ne peut pas être utilisé avec transform. – Manuel
N'y a-t-il pas un boost :: trim_copy juste pour cette situation? – Rob