これは、この質問のフォローアップです。
基本的に、オブジェクトを格納し、後でそれらを処理するコンテナーが必要です。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
.
これをどのように解決しますか?私が見逃しているパターンはありますか?