2010-02-08 18 views
9

Actualmente estoy atascado buscando la sintaxis correcta para recortar cada cadena en un std :: vector.boost :: recortar cada cadena en std :: vector <std::string>

me trataron

std::vector<std::string> v; 
std::for_each(v.begin(), v.end(), &boost::trim); 

que me dio los siguientes mensajes de error en MSVC7.1.

C2784 de error: '_Fn1 std :: for_each (_init, _init, _Fn1)': no ​​se pudo deducir argumento de plantilla de 'T1' de 'std :: vector < _Ty> :: iterador' con [_Ty = std :: string]: vea la declaración de 'std :: for_each'

error C2896: '_Fn1 std :: for_each (_InIt, _InIt, _Fn1)': no ​​se puede usar la plantilla de función 'void boost :: algorithm :: trim (SequenceT &, const std :: & local)' como un argumento de función: ver la declaración de 'impulso :: :: algoritmo de ajuste'

Aunque repartiera de forma explícita el compilador no puede encontrar el parámetro de plantilla que recorta el segundo parámetro, aunque está configurado de manera predeterminada.

std::for_each(v.begin(), v.end(), &boost::trim<std::string>); 

C2198 de error: 'vacío (__cdecl *) (std :: string &, const std :: localidad &)': muy pocos argumentos para la llamada a través de puntero a la función

Me preguntaba cómo sería la sintaxis correcta para llamar recortar para cada elemento en v.

+2

Nótese también que 'for_each' no se utiliza para modificar secuencias originales. Use 'transform' en su lugar. –

+4

Wrong, for_each es perfecto para lo que está haciendo. Tenga en cuenta que boost :: trim devuelve vacío, lo que significa que no se puede usar con la transformación. – Manuel

+0

¿No hay un impulso :: trim_copy solo para esta situación? – Rob

Respuesta

23

que necesita vincular así el segundo parámetro de ajuste (el local):

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

Gracias. Pensé en bind también, pero no pensé que podría agregar fácilmente el segundo parámetro allí. Tú ayudaste mucho. – Norbert

Cuestiones relacionadas