你可以在没有列表或向量的情况下迭代类对象吗?

时间:2018-01-23 19:48:39

标签: c++ list

假设您有一个类Class并且您创建了2个对象

  Class *obj1 = new Class();
  Class *obj2 = new Class();

我知道你可以创建一个列表并推送对象,然后调用

  for (auto i : list_name) i->function();

但有没有办法像这样迭代?

  for(auto i:Class) i->function();

3 个答案:

答案 0 :(得分:8)

是的,你可以:

for( auto i : { obj1, obj2 } ) i->function();

live example

答案 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();