【发布时间】:2014-06-28 11:25:38
【问题描述】:
目前,我在计时器和堆栈的帮助下进行延迟函数调用。 类似的东西:
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];
}
在我看来,这种方式不太方便。还有其他解决方案吗?
【问题讨论】:
-
使用(成员)函数指针而不是
enum和调度怎么样? -
相关:你可能会找到this answer interesting,如果没有别的想法(注意,接受的答案确实是猫的胡须)。
-
@Captain 是 c++11 吗?我不能使用它。
-
您也可以使用
boost::function和boost::bind。
标签: c++ function arguments call delay