假设您有一个类Class并且您创建了2个对象
Class *obj1 = new Class();
Class *obj2 = new Class();
我知道你可以创建一个列表并推送对象,然后调用
for (auto i : list_name) i->function();
但有没有办法像这样迭代?
for(auto i:Class) i->function();
答案 0 :(得分:8)
答案 1 :(得分:3)
不能在range based loop内使用类名代替 range_expression ,因为类不代表容器,也不代表一系列值。您有Class
的独立实例。您需要将实例存储在以下某个位置:
- 数组或
- 定义了开始和结束成员函数或自由函数的对象或
- 一个braced-init-list
然后在基于范围的循环中使用其中一个。
答案 2 :(得分:0)
不完全清楚你想要什么,但你也可以注册Class
的所有实例(如果它是你的):
class Class {
public:
static std::set<Class*> instances;
Class() { instances.insert(this); }
~Class() { instances.erase(instances.find(this)); }
void function();
};
std::set<Class*> Class::instances;
然后迭代所有实时Class
实例,如下所示:
Class c;
auto upc = std::make_unique<Class>();
std::vector<Class> vc(4);
for (auto i : Class::instances)
i->function();