作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有:
std::unordered_set<ui::Button*> _buttons;
std::unordered_set<Sprite*> _sprites;
std::unordered_set<Sprite*> _someOtherSprites;
ui::Button
和Sprite
都继承自Node
。
例如,我可以这样做:
for(Node* node : _sprites){
node->setPosition(1,2);
}
for(Node* node : _someOtherSprites){
node->setPosition(1,2);
}
for(Node* node : _buttons){
node->setPosition(1,2);
}
由于我需要对两组执行相同的操作,是否有某种方法可以只使用一组循环来完成此操作?我的意思是将循环内执行的所有代码都放在一个地方,而不是像上面那样在不同的循环中重复它?
我必须在单独的集合中维护 sprite、someOtherSprites 和按钮。
我可以做这样的事情吗:
std::unordered_set<std::unordered_set<Node*>> mySets;
mySets.insert(_buttons);
mySets.insert(_sprites);
mySets.insert(_someOtherSprites);
for(auto mySet : mySets)
for(Node* node : mySet){
node->setPosition(1,2);
}
}
我没有必要这样做。我只是好奇这样的事情是否可能。
最佳答案
更好的选择是使用 unordered_set 指针的列表或 vector ,然后将指针推送到您要修改的集合。由于存储在无序集中的类型不同,但共享一个公共(public)基础,因此您需要将它们组装到一个具有公共(public)基础的容器中,然后才能对所有类型进行操作。
std::vector<Node *> myObjects;
// optional myObjects.reserve(_buttons.size() + _spriites.size() + ...)
for (Node *n: _buttons) myObjects.push_back(n);
for (Node *n: _sprites) myObjects.push_back(n);
然后通过 myObjects
在每个节点上调用您的函数。
或者您可以定义一个 lambda 以在循环中使用。
auto fn = [](Node *n) { n->setPosition(1, 2); }
for (Node *node: _sprites) {
fn(node);
}
for (Node *node: _buttons) {
fn(node);
}
关于c++ - 如何使用多态性将相同的操作应用于具有相同基类的不同对象的 unordered_sets?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55756603/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!