Ho un std :: vector e voglio controllare un attributo specifico di ogni elemento. SomeStruct ha un attributo 'type'. Voglio verificare questo attributo in modo che sia Type1 o Type2.Come usare boost :: lambda insieme a std :: find_if?
Il mio piano è utilizzare boost :: lambda.
std::vector<SomeStruct>::const_iterator it =
std::find_if(
vec.begin(), vec.end(),
_1.type == SomeStruct::Type1 || _1.type == SomeStruct::Type2);
Perché ho bisogno di accedere ad un attributo specifico di ogni elemento, non sono sicuro se posso uso boost :: lambda a tutti.
Eventuali suggerimenti?
Questo è perfetto, ma non riesco a capire perché funzioni. Funziona allo stesso modo anche se leghi (& SomeStruct :: func, _1) (dove func è una funzione) che mi confonde ancora di più. – yhager
@yhager 'bind (& SomeStruct :: type, _1)' ti dà un boost lambda che sta per il risultato di fare '.type' sull'oggetto per cui' _1' è un segnaposto. Per ulteriori informazioni [consultare la documentazione per bind] (http://www.boost.org/doc/libs/1_50_0/doc/html/lambda/le_in_details.html#lambda.bind_expressions). – sepp2k