编写为使用函数对象的类是否也可以使用lambda或std :: function类型?

时间:2014-07-09 14:47:50

标签: c++ c++11 lambda functor std-function

我已经编写了一个模板类来处理无参数的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也可以。

1 个答案:

答案 0 :(得分:2)

因为它是在函数对象类上参数化的模板,是的,它应该适用于所有可调用对象。