gpt4 book ai didi

具有依赖性的 C++ 策略设计

转载 作者:太空宇宙 更新时间:2023-11-04 14:20:04 25 4
gpt4 key购买 nike

这是 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 {
// ...
};

所有这些都对性能至关重要,所以我不能只使用一个带有一个条目的 vector 来代替 StoragePolicySingle

你会如何解决这个问题?我缺少任何模式吗?

最佳答案

为什么 ActionPolicy 需要了解 StoragePolicy

为什么 ActionPolicy 添加了对象?

如果您将 ActionPolicy 传递给 StoragePolicy 作为 execute 的参数,则调用 eval单品还是合集,这不就帮你解决了吗?

关于具有依赖性的 C++ 策略设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8334926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com