問題タブ [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++ - ポリシーベースの設計で相互作用するポリシー
プロジェクトの遺伝的アルゴリズムをプログラムしようとしていますが、さまざまな機能を別々に保つのに苦労しています。ポリシーベースの設計について調べてきましたが、これは問題の解決策のように思えますが、実装方法がよくわかりません。
SelectionPolicy (評価するソリューションを決定するため) と FitnessPolicy (特定のソリューションの適合性を決定するため) から継承する OptimizerHost があります。問題は、2 つのポリシーがどのように相互に通信できるかを理解できないことです。アルゴリズムの大部分は SelectionPolicy に実装されていますが、それでも解の適合性をチェックできる必要があります。私が考えることができる唯一のことは、OptimizerHost 自体に SelectionPolicy アルゴリズムを実装することです。そうすれば、FitnessPolicy から必要なものを継承します。しかし、それではそもそもポリシーを使用するという点が欠けているように思えます。私は何か誤解していますか?
c++ - コンテナとカスタムロジックを組み合わせるためのC++テクニック/ライブラリ?
時々オブジェクトを遅らせて処理する必要があります。ただし、オブジェクトを保持しているスレッドは遅延できません。
自然な解決策は、そのようなオブジェクトを待機する別のスレッドを用意することです。オブジェクトが使用可能になると、この2番目のスレッドは必要に応じて遅延し、オブジェクトを処理します。2番目のスレッドはセマフォでスリープします。メインスレッドに遅延処理用のオブジェクトがある場合、メインスレッドはそのオブジェクトをキューに入れ、セマフォに信号を送ります。
これは機能しますが、別のプログラマー(または私)がオブジェクトをキューに入れるときにセマフォに信号を送るのを忘れる可能性があるというリスクがあります。これを強制してほしい。
したがって、標準のコンテナーに基づいているが、コールバック(おそらくポリシーベースの設計を使用)と内部セマフォを追加して、独自のコンテナーを作成する場合があります。アイテムがコンテナに追加されたときに、コールバック関数の実行を強制します。
しかし、この機能は非常に便利で一般的に望まれているので、誰かがすでにこれを書いていると思います。おそらく、ここで提案しているよりも優れたデザインで、再入可能性などの毛深い詳細に対処しています。このためのライブラリは存在しますか?または、この機能を取得するためのよく知られた手法はありますか?
c++ - 特性とポリシーの違いは何ですか?
動作を構成しようとしているクラスがあります。
その後、サーバーオブジェクト自体があります。
私の質問は、上記の私の使用法についてですが、私の名前は間違っていますか?テンプレート化されたパラメーターは、実際には特性ではなくポリシーですか?
テンプレート化された引数は、いつポリシーに対して特性になりますか?
c++ - 現実世界のオープンソース プロジェクトにおけるポリシー ベースの設計
ポリシーベースの設計が広く使用されているオープンソースの C++ プロジェクト (できれば lib ではない) を教えてもらえますか?
c++ - ポリシー間でメンバーを共有する方法は?
メンバーを保持するホスト クラスがあるとします。
そして、p1 と p2 で同じメンバーを使用したい:
それを行う方法はありますか?
私が考えることができる 1 つの方法は、仮想継承を介してメンバーを含む別のクラスから派生p1
するp2
ことです。これにより、物事が複雑になります。
もう 1 つは、メンバーを関数の引数としてポリシーに渡すことです。このようなもの:
もう 1 つの考えは、CRTP を使用して、ポリシーからホストを取得し、ホストからポリシーを取得して、メンバーにアクセスできるようにすることusing
でしたが、それは不可能です。
更新 (1)
CRTPでの私の試み
mixins - クラス ミックスインを使用してポリシー ベースの設計を実現するにはどうすればよいですか?
インターフェイスを使用した c++ のポリシー ベースのデザイン パターンを使用して、クラスの実装を実現する方法を知っています。クラスのミックスインで同じことを行う方法がわかりません。
これは、簡単にインライン化でき、インターフェイスの仮想呼び出しの「境界」がないため、コードから最後のパフォーマンスを絞り出したい場合に役立ちます。
c++ - ポリシーベースの設計におけるあいまいな継承
sayhello
私は 2 つのポリシーを取るホスト クラスを持っていますtalk
。ポリシーtalk
はクラス テンプレートであり、それ自体がたとえばsayhello
. 問題は、sayhello::saySomething
があいまいであることですhost2
(このダイヤモンドの問題を で解決しようとしましたvirtual
)。
このあいまいさをどのように解決できますか? または、一般に、そのような問題に対するより良い設計はありますか?
例:
c++ - ポリシーベースの設計でポリシーを複数使用する
roundtrip
2 つのポリシーを取るクラス テンプレートがあります。それらが異なる限り、すべて問題ありませんが、1 つのポリシーを 2 回使用すると、コンパイル エラーが発生します。
例:
それはどのように解決できますか?または、同じ動作を実現するためのより良い設計はありますか?
編集: ポリシーにラッパーを追加しましたが、ユーザー インターフェイスは変わりません。このソリューションについてどう思いますか? クリーンなデザインですか?
c++ - ロガーを使用したポリシー ベースのアプローチ
ポリシーベースの設計に関する記事を読み、自分で何かを試してみたいと思った後、以前行ったロガークラスをポリシーベースのアプローチに再設計することに時間を費やしています。
いくつかのコード:
ロガーによっては、SimpleChannelVsLogger 内のログチャネルや FileOututter 内のログファイルのファイル名などの追加情報を渡す必要があります。
パラメーターを LoggerImpl のコンストラクターに const 参照として渡し、後でロガー クラスに格納されているオブジェクトにコピーします。一時的に作成されたオブジェクトを const 参照にバインドするときに発生する関数引数を介して有効期間の延長が推移的ではないため、それらをコピーする必要があります (詳細はこちら: Does a const reference prolong the life of a temporary? )。
ここで最初に: テンプレートを使用するときにランタイム割り当てに興味がないのでポインターを使用したくない場合は、一時的に作成されたオブジェクトを上記のようにコピーする以外に解決策はないと思いますか?
コピーの実際の問題は、FileOutputter に付属しています。もちろん、ストリームをコピーすることはできません。ストリームを含む FileOutputter オブジェクトをコピーするにはどうすればよいでしょうか。この問題を克服するために、次の解決策を思い付きました。
どういうわけか、これは「単純なロガークラス」にとっては少し複雑に思えるかもしれませんが、これは、この場合のポリシーベースの設計アプローチの「問題」にすぎない可能性があります。
どんな考えでも大歓迎です