Geri arama işlevinizi bir functor ile değiştirin - durumu kaydedebilir. Bir örnek funktoru:
#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;
}
Not funktor içinde shared_ptr
kullanımı - f
funktor yerel bir kopyasını (not pass-by-value) vardır ve bu kopya onun int
paylaşmak istiyorum çünkü bu erişiminiz olan functor ile. Ayrıca, f
'un argümanını değerlere göre alması gerektiğini unutmayın, çünkü yalnızca tüm hızlandırıcıları desteklemezsiniz.
Bu değişkeni yalnızca geriçağırım işlevinde istiyorsanız, istediğiniz statik bir değişkendir. – Geoffroy
bir statik değişken kullanabilir, ancak genel olarak kullanımı hakkında çok dikkatli olun – maress