私は、いくつかのボタンと小さなグラフィックディスプレイでユーザーとインターフェイスする組み込みシステムに取り組んでいます。
余談ですが、私は組み込みシステムを使用しているので、動的なメモリ割り当てをできるだけ回避したいと思います。std :: vectorのようなものは利用できません。
次のように、クラシックなネストされたメニュー構造を使用して構成メニューを実装する必要があります。
Level A Node 1
-> Level B Node 1
-> Level C Node 1
-> Level B Node 2
-> Level B Node 3
Level A Node 2
Level A Node 3
ここでの最善のアプローチについてはよくわかりません。複合パターンを使用するなど、このようなものにアプローチするいくつかの方法について読みました。しかし、私はいつも「紙の上」では良さそうに見えても、実装するのは面倒そうなものにぶつかります。
私の一般的な考えはMenuNode
、初期化時にそのサブノードと親ノードについて知っているクラスを持つことです。Menu
クラスは、ノードナビゲーションおよび処理を扱うことができます。明らかに、すべてMenuNode
が次のような特定の動作を実行/実装する必要があります。
Menu
何を表示したいかを報告します(実際のレイアウト/配置はの問題ではありませんMenuNode
)。- ユーザー入力に反応する(値を増減する/ボタンを押すなど)
- 関心のある実際の値にアクセスする(
ApplicationSettings
クラスに属している)
これを実装する最良の方法は何でしょうか?
(抽象的な)
MenuNode
基本クラスを使用して、すべてのメニューノード項目のサブクラスを作成します。初期化中に、ApplicationSettings
必要になる可能性のある他の依存関係へのポインタを提供できます。どういうわけか、それぞれが一度だけインスタンス化される10個の派生クラスを作成するのは間違っていると感じています。MenuNode
すべてのノードに同じクラスを使用し、関数を解放するコールバックを通じて機能を実装します。私が読んだことから、そのかなり一般的なものは、自由な関数をオブジェクトと「結合」することです。しかし、それは物事を複雑にしてしまうような気がします。ReportButtonPress()などのメンバーごとに、初期化中に実際の実装のコールバックを提供する必要があります。ここで見落としているものがあると思います。