我已经编写了一个模板类来处理无参数的void返回函数对象:
//...Class declaration here...
template<class FunctionObject>
Alarm<FunctionObject>::Alarm(const FunctionObject& fn)
: StopWatch(), _delegate(fn), _tickTime(1.0), _run_count(-1) { /* DO NOTHING */ }
template<class FunctionObject>
Alarm<FunctionObject>::Alarm(double tickTime, const FunctionObject& fn)
: StopWatch(), _delegate(fn), _tickTime(tickTime), _run_count(-1) { /* DO NOTHING */ }
template<class FunctionObject>
Alarm<FunctionObject>::Alarm(double tickTime, int run_count, const FunctionObject& fn)
: StopWatch(), _delegate(fn), _tickTime(tickTime), _run_count(run_count < -1 ? -1 : run_count) { /* DO NOTHING */ }
template<class FunctionObject>
Alarm<FunctionObject>::~Alarm() {
if(_isRunning) Stop();
}
template<class FunctionObject>
FunctionObject Alarm<FunctionObject>::Tick() {
if(IsRunning() == false) return _delegate;
if(GetElapsedTimeInSeconds() >= _tickTime) {
Reset();
if(_run_count == 0) return _delegate;
_delegate();
if(_run_count > -1) --_run_count;
Start();
}
return _delegate;
}
如果用户尝试传入lambda或std::function
?
如果没有,它似乎只是添加一个带有lambda的构造函数(甚至可能吗?)或std::function
也可以。
答案 0 :(得分:2)
因为它是在函数对象类上参数化的模板,是的,它应该适用于所有可调用对象。