0

我有这样的代码

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

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

如果参数中没有任何回调函数,我想为 myCallback 分配一些函数,它什么都不做(或什么都做不了),因为之后,我在循环中调用这个函数(我会由于管道刷新,喜欢避免循环中的'if')。我尝试了一个没有成功的无操作 lambda(不兼容)。

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

4

3 回答 3

5

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

于 2012-08-27T08:47:18.760 回答
1

用你想要的签名写一个空函数。

void __stdcall pass(int a, int b) 
{
}
于 2012-08-27T08:46:33.050 回答
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);
}
于 2012-08-27T08:48:24.327 回答