std :: for_each, chiamando la funzione membro con parametro di riferimento
-
10-07-2019 - |
Domanda
Ho un contenitore di puntatori su cui voglio scorrere, chiamando una funzione membro che ha un parametro che è un riferimento. Come posso farlo con STL?
La mia attuale soluzione è usare boost :: bind e boost :: ref per il parametro.
// Given:
// void Renderable::render(Graphics& g)
//
// There is a reference, g, in scope with the call to std::for_each
//
std::for_each(
sprites.begin(),
sprites.end(),
boost::bind(&Renderable::render, boost::ref(g), _1)
);
Una domanda correlata (da cui ho tratto la mia soluzione attuale) è boost :: bind con funzioni che hanno parametri che sono riferimenti . Questo in particolare chiede come farlo con boost. Sto chiedendo come sarebbe stato fatto senza potenziamento.
Modifica : c'è un modo per fare la stessa cosa senza usare boost
. Usando std::bind
e gli amici lo stesso codice può essere scritto e compilato in un compilatore compatibile con C ++ 11 come questo:
std::for_each(
sprites.begin(),
sprites.end(),
std::bind(&Renderable::render, std::placeholders::_1, std::ref(g))
);
Soluzione
Questo è un problema con la progettazione di <functional>
. Devi usare boost :: bind o tr1 :: bind.
Altri suggerimenti
Scopri Come utilizzare std :: foreach con parametri / modifica . La domanda mostra come farlo usando un ciclo for. La risposta accettata fornisce un esempio di come ottenere questo risultato con l'algoritmo for_each.