次のような状況があります。
class A
{
public:
A(int whichFoo);
int foo1();
int foo2();
int foo3();
int callFoo(); // cals one of the foo's depending on the value of whichFoo
};
私の現在の実装whichFoo
では、コンストラクターのデータ メンバーに inの値を保存し、 switch
inを使用してcallFoo()
、どの foo を呼び出すかを決定します。または、コンストラクターでa を使用して、で呼び出されるswitch
右側へのポインターを保存することもできます。fooN()
callFoo()
私の質問は、クラス A のオブジェクトが一度だけ構築さcallFoo()
れ、非常に多数回呼び出される場合、どの方法がより効率的かということです。したがって、最初のケースでは、switch ステートメントが複数回実行されますが、2 番目のケースでは、switch が 1 つしかなく、そのポインターを使用してメンバー関数が複数回呼び出されます。ポインターを使用してメンバー関数を呼び出すと、直接呼び出すよりも遅いことがわかっています。このオーバーヘッドが のコストより多いか少ないかは誰にもわかりswitch
ませんか?
明確化: どのアプローチがパフォーマンスを向上させるかは、実際に試して時間を計るまでわからないことを認識しています。ただし、この場合、既にアプローチ 1 を実装しており、アプローチ 2 が少なくとも原則としてより効率的であるかどうかを調べたいと考えていました。それが可能であるように思われ、今ではわざわざそれを実装して試してみるのは理にかなっています.
ああ、私は審美的な理由からアプローチ 2 の方が好きです。私はそれを実装する正当な理由を探していると思います。:)