問題タブ [policy-based-design]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - コンパイル時 C コールバックをコンパイル時 C++ コールバックに変換する
組み込みデバイス (ESP32) 用に C コードベースを C++ に変換しています。現在のコードで繰り返されていることの 1 つは、C モジュールへの「コールバック」を宣言し、それらを「ユーザー」モジュールに実装する方法です。
たとえば、Button モジュールの現在の API は次のとおりです。
関数がデフォルトで ed であることを知っているextern
ので、これは単にモジュールがそれらを実装する責任を負っていないという印です。このメソッドの主な利点は、未実装のコールバックがコンパイル時にリンカーによってキャッチされることです。
C++ への移行中、コールバック実装の存在をコンパイル時にチェックしたい (動的ディスパッチは必要ありません) と同時に、複数のオブジェクトを作成できるようにするため、クラスが必要です。
私は CRTP とポリシーベースの設計は初めてですが、これらのいずれかを使用する必要があると思います。それともテンプレートファンクターですか?これら2つの違いは何ですか?
私の現在の考えは次のとおりです。
実装コードは次のとおりです。
ここで私を悩ませている主な点の 1 つは、実装をcpp
ヘッダーではなくファイルに保持したいということです。クラスについてはButton
、コンストラクターをファイルに実装したいと思いcpp
ます。どうすればそれを達成できますか?
全体として、これは理にかなっていますか?継承を使用せずにコールバックを注入するより良い方法はありますか?