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))
);
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top