计划说明
我有三个班级:A,B和C.
出于这个问题的目的,B类只包含一个ID变量,一个状态变量,以及那些的setter和getter。
A类包含B对象的向量,以及使用单位ID存储,删除,修改或比较单位的功能。
C类包含与黑匣子交谈的功能,此黑匣子包含与A类相同的B向量,但具有更新的状态。
具有基本信息的类的粗略示例显示在本文末尾。
问题
在我的主窗口中,我想迭代在A类中找到的向量。对于我希望获取ID的所有元素,将其传递给C类,并使C类返回更新状态。我已经绘制了粗略sequence diagram来说明我的意思。
我的问题是如何正确迭代A类中的向量,以获取随后发送到C类的ID。
我此时考虑的是类似于以下内容(注意:出于此问题的目的,A类中的向量会自动填充):
int main() {
...
...
for(int i = 0; i < A.getVectorSize(); i++) {
char ID = A.getID( i );
bool state = C.getState( ID );
A.updateState(ID, state);
}
}
这并不是很精彩,这就是我要求就如何执行此任务提出建议的原因。我已经制定了一个粗略的"Overview" image系统。对我的图纸不清晰表示歉意。
类
class A {
public:
void updateStatus(char ID, bool status);
...
...
private:
vector<B> b_Storage;
}
class B {
public:
getters & setters
private:
char ID;
bool state;
}
class C {
public:
bool getState(char ID);
...
private:
...
}
答案 0 :(得分:2)
您可以选择不在main
进行迭代,而是将迭代移至A
:
class A
{
public:
void updateStates(std::function<bool(char)> f)
{
for (const auto& b: b_Storage)
{
updateStatus(b.id, f(b.id));
}
}
};
// ...
int main() {
// ...
A a;
C c;
a.updateStates([&](char id) { return C.getState(id); });
}
这使main
更加独立于A
的实施。
答案 1 :(得分:0)
如果您的问题是迭代b_Storage
的私有元素,您可以通过在A类中添加两个公共方法来尝试使用迭代器:
\((\d+)
并使用这些迭代器访问INSERT INTO `wp_make`(`id`, `name`, `slug`) VALUES (0,"audi","audi");
INSERT INTO `wp_make`(`id`, `name`, `slug`) VALUES (1,"BMW","bmw");
INSERT INTO `wp_make`(`id`, `name`, `slug`) VALUES (2,"Mercedes","mercedes");
的元素。