延迟函数调用,如何传递参数

Delayed function call, how to pass params?

本文关键字:何传递 参数 函数调用 延迟      更新时间:2023-10-16

目前,我在计时器和堆栈的帮助下进行延迟函数调用。像这样:

enum fnc_t {
    _FNC_1,
    _FNC_2,
    __MAX_FNC
};
typedef std::deque<fnc_t> calls_t;
calls_t _calls; 
void fnc1() {
    _calls.push_back( _FNC_1 );
}
void fnc2() {
    _calls.push_back( _FNC_2 );
}
void onTimer() {
    while ( _calls.front() ) {
        if ( _calls.front() == _FNC_1 ) {
           doFnc1();
        } else if ( _calls.front() == _FNC_2 ) {
           doFnc2();
        }
        _calls.pop_front();
    }
}

不,我需要给函数fnc1和fnc2添加参数,即

void fnc1( std::string a1 ){} 
void fnc2( int a21, void * a22 ) {}

并在我的延迟呼叫中使用它们,即

...
doFnc1( a11 );
...
doFnc( a21, a22 );

实现这一目标的最佳方法是什么?我可以用一些结构体来实现这个任务,而不是fnc_t,它将包含一些额外的公共参数空间,例如:

struct fnc_call_t {
  fnc_t fnc;
  void * p[5];
}
我认为这种方式不太方便。还有其他解决方案吗?

不幸的是,我不能使用boost或c++ 11,所以我已经这样做了

class Call {
public:
    virtual void run() = 0;
public:
    virtual ~Call(){
    }
};
class CallFnc1: public Call {
public:
    void run() {
        doFnc1(a,q);
    }
public:
    CallFnc1( int a, std::string q ) : _a(a),_q(q){
    }
    ~CallFnc1(){
    }
private:
    int _a;
    std::string _q;
};
typedef std::deque<Call*> calls_t;
calls_t _calls; 
int fnc1( int a, std::string q) {
    _calls.push_back( new CallFnc1(a,q) );
}
void onTimer() {
    while ( _calls.front() ) {
         Call * q = _calls.front();
         q->run();
         delete q;
        _calls.pop_front();
    }
}