2010-02-08 3 views
9

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.

+2

Notez également que 'for_each' ne sert pas à modifier les séquences d'origine. Utilisez 'transform' à la place. –

+4

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

+0

N'y a-t-il pas un boost :: trim_copy juste pour cette situation? – Rob

Répondre

23

Vous devez lier ainsi le deuxième paramètre de finition (les paramètres régionaux):

std::vector<std::string> v; 
std::for_each(v.begin(), v.end(), 
       boost::bind(&boost::trim<std::string>, 
          _1, std::locale())); 
+0

Merci. J'ai aussi pensé à lier, mais je ne pensais pas pouvoir facilement ajouter le deuxième paramètre. Tu as beaucoup aidé. – Norbert

Questions connexes