Это не имеет смысла. C ++ является статически типизированным языком, поэтому вы должны определить во время компиляции, с какими типами вы хотите работать. Вы не можете выбрать «случайный тип» в C ++, и, следовательно, вы не можете ссылаться на «случайный член класса».
Единственная разумная вещь, которую вы можете сделать - это выбрать случайный элемент из однородного контейнера, например vector
или array
(по сути, выбрав случайный индекс).
Обратите внимание, что коллекция указателей базового класса действительно является однородной коллекцией, которую можно использовать для обработки разнородного набора объектов, но все они должны быть одного и того же типа. Посетители (использующие динамическое приведение) могут использоваться для обработки фактических конкретных экземпляров. Возможно, это может быть полезным подходом, поэтому позвольте мне написать пример:
struct Object { virtual ~Object() { } };
struct Foo : Object { /* ... */ };
struct Bar : Object { /* ... */ };
std::vector<std::unique_ptr<Object>> v;
// populate v, e.g. "v.emplace_back(new Bar);"
for (auto & p : v)
{
if (Foo * q = dynamic_cast<Foo*>(p.get())) { /* use q */ }
else if /* further cast attempts */
}