Obecnie utknąłem, znajdując poprawną składnię do przycinania każdego ciągu w std :: vector.doładowanie :: przycinanie każdego ciągu znaków w std :: vector <std::string>
Próbowałem
std::vector<std::string> v;
std::for_each(v.begin(), v.end(), &boost::trim);
który dał mi następujące komunikaty o błędach w MSVC7.1.
error C2784: '_Fn1 std :: for_each (_init, _init, _Fn1)': nie można wywnioskować argumentu szablonu dla 'T1' z 'std :: vector <> :: iterator _Ty' z [_Ty = std :: string]: zobacz deklarację "std :: for_each"
błąd C2896: '_Fn1 std :: for_each (_InIt, _InIt, _Fn1)': nie można użyć szablonu funkcji 'void boost :: algorithm :: trim (SequenceT &, const std :: locale &)”jako argument funkcji: patrz deklaracja 'boost :: algorytmu :: wykończenia'
Gdybym wyraźnie dać Parametr drugiego parametru parametru trim nie może zostać znaleziony przez kompilator, chociaż jest ustawiony domyślnie.
std::for_each(v.begin(), v.end(), &boost::trim<std::string>);
error C2198: 'void (__cdecl *) (std :: string &, const std :: locale &)': zbyt mało argumentów dla wywołania poprzez wskaźnik do funkcji
Zastanawiam się, jak mogłaby wyglądać poprawna składnia wywołania trim dla każdego elementu w v
.
Należy również zauważyć, że 'for_each' nie służy do modyfikowania oryginalnych sekwencje. Zamiast tego użyj "transform". –
Niepoprawnie, for_each jest idealny do tego, co robi. Należy pamiętać, że funkcja boost :: trim zwraca wartość void, co oznacza, że nie można jej użyć z transformacją. – Manuel
Czy w tej sytuacji nie ma boost :: trim_copy? – Rob