2012-08-27 135 views
0

C++回调函数,我有这样的它什么也不做

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

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

代码如果不会在参数中的任何回调函数,我想分配一些功能myCallBack函数,它会做什么(或几乎没有),因为之后,我在循环中调用这个函数(并且我想避免因为管道刷新而在循环中'if')。我试过no-op lambda没有成功(不兼容)。

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

+2

难道你不能事先定义一个无操作函数并使用它吗? –

+3

此代码不是C++ –

+0

至少已更正。 –

回答

5

你的逻辑是疯了!如果if被正确预测,它将几乎免费。如果间接跳跃被错误预测,那将是可怕的。一个if比间接跳转更容易预测(只有两种可能性,推测性执行是可能的,大多数CPU上预测时隙更多)。所以在这种情况下,几乎没有可以想象的情况。

+0

粗鲁但内容丰富。 +1 – bitmask

+1

对不起,货物崇拜节目真的会在我的皮肤下。 –

+0

@大卫 - 钝和重点。为什么不叫一个空间?! –

1

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

void __stdcall pass(int a, int b) 
{ 
} 
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); 
}