1

これは、この質問のフォローアップです。

基本的に、オブジェクトを格納し、後でそれらを処理するコンテナーが必要です。ActionPolicyオブジェクトに対して実行されるアクション ( ) とストレージ ( StoragePolicy) の両方をポリシー クラスに入れたいと考えています。最後に、クラスには 2 つの関数が必要です。

  • addObject()に依存するシグネチャを使用しますActionPolicy。つまり、この関数はそこで定義する必要があります。
  • execute()によって保存されたすべてのオブジェクトを調べ、それらすべてに対してStoragePolicy実行ActionPolicy::evaluate(obj)します。

(部分的に疑似) コード ( でマークされた場所はHere、この設計では機能しない場所です):

struct ActionPolicy {
  // Signature is dependant on this policy
  void addObject(T obj, /* ... */) {
    // Do something with the object
    StoragePolicy::store(obj); // <--- Here
  }

  void eval(T obj) {
    // Do something with the object
  }
};

struct StoragePolicySingle {
  T obj;

  void store(T obj) {
    this->obj = obj;
  }

  void execute() {
    ActionPolicy::execute(obj); // <--- Here
  }
};


struct StoragePolicyMulti {
  std::vector<T> vec;

  void store(T obj) {
    vec.push_back(obj´);
  }

  void execute() {
    for (obj in vec) {
      ActionPolicy::execute(obj); // <--- Here
    }
  }
};

template <class A, class B> MyClass : public A, public B {
  // ...
};

これらはすべてパフォーマンスが重要であるため、StoragePolicySingle.

これをどのように解決しますか?私が見逃しているパターンはありますか?

4

1 に答える 1

0

なぜActionPolicy知る必要があるのStoragePolicyですか?

なぜActionPolicyオブジェクトが追加されているのですか?

の引数としてにを渡してActionPolicyから、単一のアイテムまたはコレクションのいずれかを呼び出すと、これで解決しませんか?StoragePolicyexecuteeval

于 2011-12-01T01:02:45.720 に答える