Quando si confrontano funzioni e funtori, viene spesso menzionato che un vantaggio di un funtore su una funzione è che un funtore è di stato.Dati di stato nei membri del functor vs funzione globale
Tuttavia, in questo codice, mi sembra che una funzione possa essere anche statica. Quindi cosa sto facendo/capendo male?
struct Accumulator
{
int counter = 0;
int operator()(int i)
{
counter += i;
return counter;
}
};
int Accumulate(int i)
{
static int counter = 0;
counter += i;
return counter;
};
int main()
{
Accumulator acc;
std::vector<int> vec{1,2,3,4};
Accumulator acc2 = std::for_each(vec.begin(), vec.end(), acc);
int d1 = acc(0); // 0, acc is passed by value
int d2 = acc2(0); // 10
std::for_each(vec.begin(), vec.end(), Accumulate);
int d4 = Accumulate(0); // 10
return 0;
}
Come proponi di ricominciare da capo? – chris
@chris: puoi riformulare per favore? – Korchkidu
Con una funzione che utilizza uno stato 'statico', lo stato è condiviso su tutti/tutti gli usi e le chiamate. A seconda dell'utilizzo, potresti aver bisogno di alcune funzionalità di "reset". Per un functor, puoi facilmente creare molti che sono indipendenti. – crashmstr