延迟函数调用,如何传递参数
Delayed function call, how to pass params?
目前,我在计时器和堆栈的帮助下进行延迟函数调用。像这样:
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();
}
}
相关文章:
- 在不传递参数数量且只有3个点的情况下,如何使用变差函数
- 通过常量引用传递参数的矩阵模板类
- c++构造函数成员初始化:传递参数
- 通过引用传递参数时C++类型转换
- 如何从两个不同的函数传递参数
- 我在这里正确传递参数了吗?
- 在未显式传递参数时默认使用 lambda 的用户输入
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 如何在运算符的帮助下传递"=" C++参数
- 在C++中,有没有一种方法可以让我在不传递参数的情况下拥有一个函数
- 当我按值传递参数时对象被破坏时?
- 从 CMD 运行.exe并自动向其传递参数
- 传递参数时如何更新C++可选参数?
- 最佳做法是在方法中传递参数
- cuda 内核调用/传递参数中的编译错误
- 在构造函数上传递参数或在每个方法上传递参数
- 在可变参数模板中传递参数组
- 使用按名称调用传递参数
- C++ 在函数中传递参数会产生错误
- 在 lambda 中传递参数时无法调用指向成员的指针