0

私はこのようなコードを持っています

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

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

引数にコールバック関数がない場合は、関数を myCallback に割り当てたいと思いますが、これは何もしません (またはほとんど何もしません)。パイプライン フラッシュのために、ループ内の 'if' を回避したい)。no-op ラムダを試しましたが、成功しませんでした (互換性がありません)。

このような機能はありますか?他の可能性はありますか?ありがとうございました。

4

3 に答える 3

5

あなたの論理は正気ではありません!ifが正しく予測された場合、ほぼ無料になります。間接ジャンプが間違って予測されると、恐ろしいことになります。間接ジャンプよりも予測がはるかに簡単です( if2 つの可能性のみ、投機的実行が可能、ほとんどの 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 に答える