我有一个功能正常的 C++ 回调函数,由用户“鼠标按下”事件触发。(IDE是VS2010。)
每次调用时,我想增加一个简单的计数变量,该变量是回调范围的本地变量。简而言之,执行此操作的“最佳实践”方法是什么?
提前感谢您的任何意见或指示。
我有一个功能正常的 C++ 回调函数,由用户“鼠标按下”事件触发。(IDE是VS2010。)
每次调用时,我想增加一个简单的计数变量,该变量是回调范围的本地变量。简而言之,执行此操作的“最佳实践”方法是什么?
提前感谢您的任何意见或指示。
用仿函数替换你的回调函数——它们可以存储状态。一个示例函子:
#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;
}
请注意在仿函数内部使用 a shared_ptr
- 这是因为f
具有仿函数的本地副本(注意传递值),并且您希望该副本int
与您有权访问的仿函数共享它。另请注意,f
必须按值获取其参数,因为您希望支持所有可调用对象,而不仅仅是函子。