C ++回调函数,什么都不做

时间:2012-08-27 08:36:15

标签: c++ callback

我有这样的代码

typedef void(_stdcall * MyProcessor)(int, int);

void FunctionProcess (MyProcessor process){
    MyProcessor myCallback;
    myCallback = (process != NULL)? process:"<functionThatDoesNothing>";
    ...
}

如果参数中没有任何回调函数,我想给myCallback分配一些函数,它什么也不做(或者什么都不做),因为之后,我在循环中调用这个函数(和由于管道冲洗,我想避免循环中的'if'。我试过no-op lambda没有成功(不兼容)。

有这样的功能吗?还有其他可能性吗?谢谢。

3 个答案:

答案 0 :(得分:5)

你的逻辑是疯了!如果if被正确预测,它几乎是免费的。如果间接跳跃被错误预测,那将是可怕的。 if比间接跳转更容易预测(只有两种可能性,推测执行是可能的,大多数CPU上有更多的预测槽)。因此,几乎没有可能的情况,这是有道理的。

答案 1 :(得分:1)

使用您想要的签名编写一个空函数。

void __stdcall pass(int a, int b) 
{
}

答案 2 :(得分:0)

typedef void(_stdcall * MyProcessor)(int,int);

void _stdcall noop(int,int) {}

void functionProcess (MyProcessor process){
    MyProcessor const myCallback = process?process:noop;
    myCallback(7,4);
}