問題タブ [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.

0 投票する
0 に答える
95 参照

c++ - コンパイル時 C コールバックをコンパイル時 C++ コールバックに変換する

組み込みデバイス (ESP32) 用に C コードベースを C++ に変換しています。現在のコードで繰り返されていることの 1 つは、C モジュールへの「コールバック」を宣言し、それらを「ユーザー」モジュールに実装する方法です。

たとえば、Button モジュールの現在の API は次のとおりです。

関数がデフォルトで ed であることを知っているexternので、これは単にモジュールがそれらを実装する責任を負っていないという印です。このメソッドの主な利点は、未実装のコールバックがコンパイル時にリンカーによってキャッチされることです。

C++ への移行中、コールバック実装の存在をコンパイル時にチェックしたい (動的ディスパッチは必要ありません) と同時に、複数のオブジェクトを作成できるようにするため、クラスが必要です。

私は CRTP とポリシーベースの設計は初めてですが、これらのいずれかを使用する必要があると思います。それともテンプレートファンクターですか?これら2つの違いは何ですか?

私の現在の考えは次のとおりです。

実装コードは次のとおりです。

ここで私を悩ませている主な点の 1 つは、実装をcppヘッダーではなくファイルに保持したいということです。クラスについてはButton、コンストラクターをファイルに実装したいと思いcppます。どうすればそれを達成できますか?

全体として、これは理にかなっていますか?継承を使用せずにコールバックを注入するより良い方法はありますか?