У меня есть куча классов.
Я в цикле хочу создать объект каждого класса и вызвать у него определенный метод. Все классы являются дочерними( и внучатыми) одного родительского.
Как можно это реализовать?
class A {
void f();
}
class B: public A { }
class C: public A { }
class D: public C { }
class E: public A { }
class F: public A { }
class G: public A { }
void main () {
// тут волшебный код который вы мне сейчас подскажите
// и в итоге получится массив классов mClass[7]
for (int i = 0; i < 7; i++) {
mClass[i] t;
t.f();
}
}
Элементами массива могут быть только объекты одного и того же типа. Если хочется запихнуть в него объекты разных классов, то это будет кортеж. Создать кортеж и вызвать метод для каждого объекта можно так:
::std::tuple<A, B, C, D, E, F, G> items{};
::std::apply([](auto &&... item){(item.f(),...);}, items);
online compiler
Сборка персонального компьютера от Artline: умный выбор для современных пользователей