这是this问题的后续问题。
基本上我想要一个存储对象的容器,然后用它们做一些事情。我想将对象(ActionPolicy
)和存储(StoragePolicy
)执行的操作都放入策略类中。最后,该课程应该有两个功能:
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
的向量。
你会如何解决这个问题?我缺少任何模式?
答案 0 :(得分:0)
为什么ActionPolicy
需要了解StoragePolicy
?
为什么ActionPolicy
会添加对象?
如果您将ActionPolicy
作为StoragePolicy
的参数传递给execute
,请在单个项目或集合上调用eval
,这是否解决不了问题为你?