私はしばしば、関数をポインタに基づいて関数が実行されるプロセスに送るコマンドとコントロールのシナリオを扱うときに、関数ポインタを自由に使いました。要求。これは、もはやswitch-case
(ジャンプテーブルの最適化を除いて)を使ってそのようなことをする必要がなくなるので、合理的に効率的な実装になります。C++のメンバ関数への関数ポインタの配列の使用
の代わりにこの:
switch(msg.cmd){
case FUNC0:
return func0(msg);
case FUNC1:
return func1(msg);
...
}
我々は直接適切なハンドラ(msg.cmd
にチェックすべての正気を省略)を実行するために、このような何かを行うことができます。たとえば、最近
(*cmd_functions[msg.cmd])(msg)
、私が持っています同様の "コントロール"機能を実装しているC++コードで作業を開始しましたが、私はスイッチケースを使用しています。 C++でこれを行う標準的な方法がありますか?おそらく、コンストラクタで初期化された関数ポインタ配列のインスタンス変数ですか?
私は、ソリューションがクラスのVテーブルのランタイム使用のためにもう少し複雑かもしれないと懸念しました。
CのメソッドはC++ではまだ動作しませんか? – JeremyP
私は現代のC++の専門家ではありませんが、今では[lambdas](http://en.cppreference.com/w/cpp/language/lambda)を持っていますので、配列やベクトルなどを作成することはできませんラムダ? – JeremyP
ちょっと不思議なことに、なぜスイッチケースがついていますか?なぜジャンプテーブルが機能しないのですか? – mnistic