プログラマーが関数ポインター フィールドを使用するよりもオーバーライドを好むのはなぜですか?
パフォーマンス上のメリット? - 私が知っていることではありません。
コードの可読性ですか?- いいえ、構文はほとんど同じです。
私が見る唯一の違いは反対です。つまり、関数ポインターは実行時に変更できます。
ここで何が欠けていますか?
プログラマーが関数ポインター フィールドを使用するよりもオーバーライドを好むのはなぜですか?
パフォーマンス上のメリット? - 私が知っていることではありません。
コードの可読性ですか?- いいえ、構文はほとんど同じです。
私が見る唯一の違いは反対です。つまり、関数ポインターは実行時に変更できます。
ここで何が欠けていますか?
構文は同じではなく、呼び出し構文も同じではありません。関数ポインタを使用するBerkeley DBなどの C ライブラリを見ると、次のような関数を呼び出さなければならないことがわかります。
db->fd(db, &filedesc);
つまりdb
、C++ でthis
(すべての非静的メソッドへの暗黙の引数) として知られているものを取得するには、繰り返す必要があります。
そして、あなたが認めているように、構造体/クラスの設定と同様に、宣言構文は異なります。関数ポインターを使用すると、すべてのインスタンスで関数ポインターを自分で設定する必要があります。これは面倒で、エラーが発生しやすい作業です。
それとは別に、オーバーライドは、関数ポインターが null になったり、おかしな場所を指すようにリセットされたりする問題を回避するため、より安全です。
関数ポインターを引数として渡すことにより、プログラマーが動作を選択できる柔軟な関数とライブラリを作成できます。