問題タブ [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++ ポリシーベースのクラス設計に適したチュートリアルは何ですか?
Modern C++ Design Generic programming と Design Patterns Appliedを読み始めたばかりで、本題に入る前に、ポリシーベースのクラス設計に関する非常に基本的なチュートリアルを読む必要があるかどうか疑問に思っています。第 1 章では、従うために必要なすべてが提供されますか?
私はすでにテンプレートの使用 (STL/boost/Poco) とテンプレート クラス/メソッドの作成の経験があります。
c++ - ポリシー ベースの設計とベスト プラクティス - C++
上記のコードは、学習ポリシー ベースの設計の一環として作成しました。上記のコードについていくつか質問があります
1 - この実装は正しいように見えますか? つまり、それは本当にポリシーベースの設計のように見えますか?
2 - あらゆる種類のペンをライターに接続できるようになりました。しかし、既定のコンストラクターがない (パラメーター化されたコンストラクターのみ) ペンを取得した場合はどうすればよいでしょうか? この状況をどのように処理しますか?
3 - 上記のコードが次のように使用される場合
コンパイラはPenTypeをInkPenに置き換えると思います。はいの場合、基本クラス名 ( PenType::Write() ) を前に付ける代わりに、 StartWriting( )からWrite()だけを呼び出すことができないのはなぜですか?
4 - ポリシー ベースの設計では、意味的に無効なクラスから派生させる必要があると思います。上記のコードでは、ライターがペンを使用するという理由だけで、ライターがペンから派生しています。しかし、作家がペンであると言うのは意味的に無効です。これに対処するための他のより良い方法はありますか、それともここで何かが欠けていますか?
何かご意見は?
c++ - タイプリストの使い方
「Modern C++ Design」で型リストについて読み、それが型のある種の共用体であると理解しました。関連性のない異なる型を型リストに入れることで、それを使用して、継承なしで一度に複数の型を表すことができます。プリミティブ型を持ついくつかの単純な関数で typelist をテストしましたが、どれも機能しませんでした。
私のタイプリストの理解が正しいかどうか、そして毎日の平均的なコードでタイプリストを使用する方法の簡単な現実世界の例を誰かに教えてもらえますか? 前もって感謝します。
ところで、私は Windows と Visual Studio 2005 とそのコンパイラを使用しています。
編集:私の例はなくなりました.vsでサンドボックスプロジェクトを使用してそれらをテストします. しかし、Dobbs チュートリアルのコードと同様に静かでした。
これは機能しますが、同じことができる継承よりも利点がありません。また、動的キャストはプリミティブ型では機能しません。次のような戻り値として使用することは可能ですか?
c++ - ポリシーベースの設計決定
私が見る限り、 StatePolicyとBehaviorPolicyの 2 つのポリシーを受け入れるDeviceというクラスがあります。
StatePolicyは、デバイスの状態を保持および管理します。BehaviorPolicy
は、C または C++ で記述されたデバイス ドライバーをラップします。
今、私は2つの質問があります:
- 状態と行動ポリシーをどのように調整するか?
- すべてのデバイスを 1 つのコンテナー内に保管するにはどうすればよいですか? Device<X, Y> のタイプは Device<N, M> とは異なるため、1 つのコンテナーに格納することはできません。
編集1:私の問題を説明するためのコードは次のとおりです:
編集 2: これにより、コードは 1 つの欠点で機能します。許可されているすべての状態タイプのリストを維持する必要があります。私にはビジターのパターンに少し似ています。何かご意見は?
前もってありがとう、
オマー。
c++ - ポリシーベースの設計とデフォルト
この質問に適切なタイトルを思いつくのは難しいです。私が本当に必要としているのは、1 つのパラメーターの代わりに異なる数の引数をテンプレート パラメーターに提供できるようにすることです。あまり意味がないので、理由を説明します。
多くの異常な使用では、ポリシーは 1 つの型 T に基づいており、実際には T でパラメーター化できないため、T をパラメーターとして使用しても意味がありません。デフォルトを含む他の用途では、ポリシーは任意の T で意味をなすことができます。
いくつかのアイデアがありますが、どれも本当にお気に入りではありません。ポリシーの代わりにコンポジションを使用して、より良い答えがあると思いましたが、fun() が実際にはクラス自体にはない追加情報を必要とするこのケースがあることに気付きました。
このばかげた構造をリファクタリングしたのはこれで 3 回目で、統合しようとしているカスタム バージョンがかなりあります。今回は釣りをするだけでなく、何かを突き止めて、今回はうまくいくことを願っています。だから私はちょうど今、誰かが私が神を変えるほど感銘を受ける何かを持っていることを期待してアイデアを釣り上げています. 誰でも良いアイデアがありますか?
編集: default_policy のテンプレートに基づいてポリシーの定義から T を取得しない理由を自問するかもしれません。その理由は、default_policy が実際には一部の型 T に特化しているためです。質問をしてから、必要なものを思いついたので、それについて説明しますが、他のアイデアを使用することもできます。
編集:まだいじっています。default_policy が「test」と永続的に結合され、以下に提案されている複数のテンプレートなど、他の方法で再利用できなかったため、上記はあまり好きではありませんでした。また、まったくスケーリングせず、少なくとも「テスト」が持つ限り、パラメーターのリストが必要です。これまでのところ機能していると思われる別のアプローチを見つけるまで、失敗したいくつかの異なるアプローチを試しました。
java - Javaポリシーベースの設計
whileループがあり、ユーザーはループがいつ停止するかを決定できるはずです。x秒後、xループ後、...この問題は、ポリシーベースの設計に従って実装する必要があります。私はこれをC++で行う方法を知っていますが、Javaで動作させることができません。
私が今していることは次のとおりです。
ポリシーを適用する必要があるメソッド「start()」を持つクラスAuctioneerがあります。
public <E extends AbstractEndAuctionPolicy> void start(E policy) { //use policy here }
AbstractEndAuctionPolicyには「endAuction()」メソッドがあるため、policy.endAuction()を実行できます。C ++では、「extendsAbstractEndAuctionPolicy」の必要はありません...
しかし、私はこの方法を使用する方法を理解することができません、以下は機能していません:
this.auctioneer.start<NewBidPolicy>(n);
グーグルが私に答えを与えていないので、皆さんが私を助けて、Javaのポリシーベースの設計について少し教えてくれることを願っています。
前もって感謝します。
c++ - C++11 テンプレート、戻り型の決定
マトリックス ライブラリを構築しており、ポリシー ベースの設計を使用しようとしています。したがって、私の基本クラスは、ストレージ メソッドといくつかのアクセス関数を提供するクラスです。また、数学関数を提供する関数マトリックスもあります。これはうまく機能しますが、戻り値の型が原因で operator* に大きな問題があります。いくつかのコードで説明します。
スタック ストレージを提供する基本クラス:
次に、数学的な機能を提供するマトリックス クラスがあります。
operator+
常に機能し、operator*
正方行列でのみ機能します。したがって、すべての行列に 1 つ必要です。そして、それはうまくいかなかった場合です。私はすでにいくつかのことを試しましたが、何も機能しません。私はこのようなものを探します。c++0x の助けを借りて (c++0x の使用は必須ではありません)、「???」に気付くはずです。:)
問題の例
ここでは、2 つのパラメーターの型のいずれにも一致しないため、型について文句を言います。しかし、コンパイラはコンパイル時に型を知る必要があり、それを提供する方法がわかりません。
設計には他のオプションがあることは知っていますが、このシナリオの解決策を本当に探しています..
ありがとうございました !
c++ - 複数のクラスの親のための部分的な特殊化
テンプレートクラスに部分的な特殊化を使用して、そのテンプレートクラスのすべての子がその特殊化を使用できるようにします。例を挙げて説明しましょう:)
このクラスには、sparse、dense、diagonalなどの行列の構造を指定する子があります。
次に、これらのクラスには、ストレージを指定する子が再びあります:スタック配列、ベクトル、リスト、キューなど。
次に、すべての数学的機能を提供するクラスMatrixがあります。このテンプレートクラスは、operator +、operator-などを実装します。
この最後のクラスでは、次のような専門分野を書きたいと思います。
しかし、DiagonalMatrixから継承するStackDiagonalMatrixを作成すると、DiagonalMatrixの特殊化が見つかりません。実際には、特殊化はまったく見つかりません。
今、この問題の解決策はありますか?いくつかのテンプレートクラスの親のためのスペシャライゼーションを書くことができますか?
どうもありがとう!
関係する完全なソース:
c++ - 可変個引数テンプレートを使用したポリシーベースの設計
不明な数のポリシーテンプレートパラメーターを受け取るテンプレートクラスPolicyDrivenClassにポリシーとして渡す一連の同種のポリシークラスがあります。
各ポリシーは「name」関数を実装しており、実行時にPolicyDriveClass::getNamesを介してすべてのポリシーの名前を照会できるようにしたいと思います。
実装は機能していますが、特に最終的な設計では、ポリシークラスが「名前」に似たいくつかの関数を実装しますが、リターンタイプは異なる可能性があり、ポリシードリブンクラスは同様のアクセサーを提供する必要があるため、不格好に感じます。これらの各関数の「getNames」に追加します。
私の質問は、誰かがこれのためのより良い実装を思い付くことができるかどうかです。
私がclang++を使用する価値があるもののために。私のバージョンのg++はこれが好きではありません。
これが私がこれまでに持っているものです:
c++ - C++ポリシーベースの設計....テンプレートパラメータに基づいていないか、シグルトンとしての基本クラス。
私のクラスのOutputPolicyは、静的/シングルトンオブジェクトに移動することもあれば、1対1のオブジェクトに移動することもあります。
英語で説明できるかどうかわからないので、疑似コードでの望ましい動作は次のとおりです。
AlgoImp :: OnDataは、いくつかの処理を実行し、NewMsgを呼び出します。NewMsg()呼び出しの実装を切り離そうとしています。
OutputPolicyがOutMessageQueueTcp(上記)の場合、OutputPolicyのインスタンスは1つだけである必要があります。したがって、シングルトンから派生するか、どこかで静的変数を使用する必要があります。
OutputPolicyがOutMessageAsInput(上記)の場合、outは姉妹オブジェクトへの入力になり、OutMessageQueueTcpに送信されます。
これがメインです。
そして私の希望する出力:
私が実際に持っているのは、AlgoImpオブジェクトのコレクションであり、それぞれに独自のトピックとデータがあります。AlgoImpは、NewMsgを呼び出すことによってoutoutを生成します。これらのメッセージをソケットに送信する必要がある場合もあれば、AlgoImp2で処理する必要がある場合もあります。
この決定はコンパイル時に行われます。多くのアルゴがそれぞれ異なることをしているでしょう。ある種のアスペクト指向のことをやろうとしているようです。
質問:
それをポリシーにすることで、Baseクラスをシングルトンまたは通常のオブジェクトにすることは可能ですか?このようなデザインパターンはありますか?多分ある種の工場?
助けてくれてありがとう。