Sono attualmente bloccato trovando la sintassi corretta per tagliare ogni stringa in uno std :: vector.boost :: tagliare ogni stringa di std :: vector <std::string>
ho cercato
std::vector<std::string> v;
std::for_each(v.begin(), v.end(), &boost::trim);
che mi ha dato i seguenti messaggi di errore in MSVC7.1.
errore C2784: '_Fn1 std :: for_each (_init, _init, _Fn1)': non poteva dedurre argomento di template per 'T1' da 'std :: vector < _Ty> :: iterator' con [_Ty = std :: string]: vedere la dichiarazione di 'std :: for_each'
errore C2896: '_Fn1 std :: for_each (_InIt, _InIt, _Fn1)': impossibile utilizzare il modello di funzione 'void boost :: algorithm :: trim (SequenceT &, std :: const locale &)' come argomento di funzione: vedi dichiarazione di 'boost :: :: algoritmo assetto'
Se io do in modo esplicito il parametro del trim del parametro template non può essere trovato dal compilatore, anche se è impostato di default.
std::for_each(v.begin(), v.end(), &boost::trim<std::string>);
errore C2198: 'void (__cdecl *) (std :: string &, std :: const locale &)': troppo pochi argomenti per chiamata tramite puntatore a funzione
mi chiedevo come la sintassi corretta per chiamare assetto per ogni elemento in v
sarebbe simile.
Si noti inoltre che 'for_each' non viene utilizzato per modificare le sequenze originali. Usa 'transform' invece. –
Sbagliato, for_each è perfetto per quello che sta facendo. Tieni presente che boost :: trim restituisce void, il che significa che non può essere utilizzato con la trasformazione. – Manuel
Non c'è un boost :: trim_copy solo per questa situazione? – Rob