メニューツールバーのすべての要素を処理する多くの機能を持つアプリケーションがあります。私はこの実装を変更します、またはメニューは、サブメニューを持つことができ可変長の関数ポインタにインライン関数またはC++のMACROSを使う方が良い
subMenuDefaultMenuShortcuts(ui->fileMenu);
subMenuDefaultMenuShortcuts(ui->editMenu);
subMenuDefaultMenuShortcuts(ui->windowMenu);
subMenuDefaultMenuShortcuts(ui->helpMenu);
subMenuUpdateLabels(ui->fileMenu,hierarchy);
subMenuUpdateLabels(ui->editMenu,hierarchy);
subMenuUpdateLabels(ui->windowMenu,hierarchy);
subMenuUpdateLabels(ui->helpMenu,hierarchy);
ことが可能です:
のコードは次のようなもののように見えます。したがって、コードの検索と置き換えは、醜いだけでなく、読みにくく、エラーを起こしやすくなります。ので、私のコードは次のようになりwhould
OnAllMenus(functionName,params ...)
:
理想的に私はこのような何かをしたいwhould
OnAllMenus(subMenuUpdateLabels)
OnAllMenus(subMenuUpdateLabels,hierarchy)
OnAllMenus(someFunction,hierarchy,argument1,argument2)
私はマクロを使用していたが、その使用は推奨されません。 関数のポインタでインライン関数を使用するHowerverは、ほとんど読みにくいコードにつながっているようです。 (そして関数の引数の数が変わることを期待している関数ポインタの例は見られませんでした)。
addindを実行しないと、それほど複雑ではない複雑なコードを作成することはできません。
また、メニューへのメンバポインタのローカル配列を作成し、それを反復処理することもできます。それは繰り返しをなくし、コードのエラーを起こしにくくします。または、より単純な記述では、参照によってメニューを取得する関数は、そのメニューのすべての操作を実行した後、単一の関数でロジックを持ちます。呼び出し元のメニューリストは、より難しいメンバポインタを使用する必要はありません読み込み/維持する。 –