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
.
Nótese también que 'for_each' no se utiliza para modificar secuencias originales. Use 'transform' en su lugar. –
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
¿No hay un impulso :: trim_copy solo para esta situación? – Rob