Sostituisci la funzione di richiamata con un funtore - possono memorizzare lo stato. Un esempio funtore:
#include <iostream>
#include <memory>
class Functor
{
private:
std::shared_ptr<int> m_count;
public:
Functor()
: m_count(new int(0))
{}
void operator()()
{
++(*m_count);
// do other stuff...
}
int count() const
{
return *m_count;
}
};
template <typename F>
void f(F callback)
{
// do stuff
callback();
// do other stuff
}
int main()
{
Functor callback;
f(callback);
f(callback);
std::cout << callback.count(); // prints 2
return 0;
}
Nota l'uso di un shared_ptr
all'interno del funtore - questo è perché f
ha una copia locale del funtore (notare il passaggio per valore) e si desidera che la copia di condividere la sua int
con il funtore a cui si ha accesso. Si noti inoltre che f
deve prendere il suo argomento in base al valore, dal momento che si desidera supportare tutti i chiamabili, e non solo i funtori.
fonte
2012-05-12 17:09:49
Se si desidera questa variabile solo nella funzione di callback, una variabile statica è ciò che si desidera. – Geoffroy
è possibile utilizzare una variabile statica, ma prestare particolare attenzione al suo utilizzo in generale – maress