Come si può chiamare uno su parte di un container, utilizzando for_each()
?Come combinare una funzione e un predicato in for_each?
Ho creato un for_each_if()
per fare un
for(i in shapes)
if(i.color == 1)
displayShape(i);
e la chiamata si presenta come
for_each_if(shapes.begin(), shapes.end(),
bind2nd(ptr_fun(colorEquals), 0),
ptr_fun(displayShape));
bool colorEquals(Shape& s, int color) {
return s.color == color;
}
Tuttavia, mi sento imitando gli algoritmi STL-simili non è una cosa che dovrei fare.
C'è un modo per utilizzare le parole chiave STL solo esistenti per produrre questo?
ho fatto non vogliono fare un
for_each(shapes.begin(), shapes.end(), bind2nd(ptr_fun(display_shape_if_color_equals), 0));
perché, in un caso più complicato, il nome funtore sarebbe fuorviante rispetto a ciò che il funtore
* C'è un modo per accedere a un membro di una struct (come
colorEquals
) per funzioni comefor_each
senza dover creare una funzione? *
Freddo. Suppongo di poter aggiungere una funzione di supporto per istanziare un oggetto 'if_fun' in modo da poter ridurre i parametri del template quando si chiama' for_each() '... –
boost :: bind funziona ugualmente bene con le normali funzioni quindi il rumore extra di I Functional basati sulla classe non sono realmente necessari – bradgonesurfing
Questa soluzione è un casino un po 'pericoloso. Amplifica gli adattatori e la gamma è ciò che desideri utilizzare qui. – newhouse