Ho una classe C++ chiamata Graph e ha un metodo algoritmo for_each_node(). Posso o farne un modello, come questo:Funzione Algoritmo: crea un modello o utilizza un parametro std :: function?
template <class UnaryFunction>
UnaryFunction Graph::for_each_node (UnaryFunction f)
{
/* ... */
}
o renderlo utilizzare std :: funzione, in questo modo:
typedef std::function<void (Node&)> ForEachNodeFunc;
ForEachNodeFunc Graph::for_each_node (ForEachNodeFunc f)
{
/* ... */
}
algoritmi standard, per esempio std :: for_each, usa il primo approccio, mentre alcune librerie, ad es. gtkmm (che è il binding C++ di GTK +), usa le funzioni come puntatori di funzione degli oggetti che li contengono.
Quali sono i vantaggi e gli svantaggi di ciascuna opzione? Non sono sicuro di quale scegliere. Che cosa dovrebbe influenzare la scelta: se la mia classe Graph è un modello di classe, o quante funzioni differenti dovrebbero essere utilizzate con il metodo dell'algoritmo, o requisiti di velocità?
Capisco ... quindi il vantaggio di std :: funzione è essere un wrapper polimorfico, e quando non è necessario il polimorfismo, i modelli sono generalmente preferibili – cfa45ca55111016ee9269f0a52e771