나는 노 인수 무효을 반환하는 함수 객체로 작업하는 템플릿 클래스 작성했습니다 :함수 객체로 작업하도록 작성된 클래스도 람다 또는 std :: function 유형으로 작동 할 수 있습니까?
//...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;
}
을 할 사용자가 람다 또는 std::function
전달하려고하면이 작품?
그렇지 않다면 람다를 사용하는 생성자를 단순히 추가하는 것처럼 보이지 않습니다 (심지어 가능합니까?) 또는 std::function
도 작동합니다.
후행 기본 매개 변수를 사용하지 않는 특별한 이유가 있습니까? –
'std :: function'과 람다 _are_ 펑터/함수 객체. 그들은 특별하지 않습니다 (람다는 약식이며, 그 이상은 아닙니다). – Xeo
표준 라이브러리 선행은 "호출 가능"을 const 참조가 아닌 값으로 전달하는 것입니다. 또한 여기서 사용법이 훌륭하게 보일지라도,'_'가 금지되어있는 많은 경우가 있으며, 간단한 규칙은 그러한 주요한'_'을 완전히 피하는 것입니다. –