Я хочу передать структуру, реализующую operator()
, функции, которая принимает boost::function
. Эта структура отслеживает количество раз, когда она была вызвана.Сделать boost :: function получить ссылку на мой объект функции
struct CallCounter
{
CallCounter() : count(0) {}
void operator()()
{
// do stuff
cout << "count is at " << count << endl;
++count;
}
int count;
};
Однако, когда я пытаюсь получить доступ count
после передачи его в другую функцию, count
еще в 0.
void callNTimes(int n, boost::function<void()> func)
{
for (int i = 0; i < n; ++i)
func();
}
int main()
{
CallCounter counter;
callNTimes(20, counter);
cout << counter.count << endl; // prints 0
return 0;
}
Несмотря на то, в то время как counter
вызывается, это распечатывания правильный count
. Я понимаю, что boost::function
делает копию моего struct counter
. Есть ли способ передать его по ссылке, чтобы впоследствии count
был правильным номером?
Я не читал вопрос достаточно подробно :( –
@MooingDuck, вы должны разместить его в качестве ответа. Вместо этого я предпочитаю шаблон.;) – Shoe