gpt4 book ai didi

c++ - 延迟函数调用,如何传递参数?

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:47 25 4
gpt4 key购买 nike

目前,我在定时器和堆栈的帮助下进行延迟函数调用。类似的东西:

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();
}
}

关于c++ - 延迟函数调用,如何传递参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24466309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com