//Генератор нового объекта класса Child1
static Child1 getRndInst() { ... }
}
class Child2 : Base {
//Генератор нового объекта класса Child2
static Child2 getRndInst() { ... }
}
//Агрегирующий класс
class Item {
Base* item;
//Генерация случайных объектов Child1 или Child2 через указатель на базовый класс
static Base* getRndItem() {
Base* (*rndItem[2])() = {
//Как описать приведение типа для возвращаемого значения указателя функции?
Child1::getRndInst,
Child2::getRndInst
}
return rndItem[rand() % 2]();
}
}
Лучше в лямбду сунь
возвращай указатели, а не конкретные объекты
Методы-генераторы же статические, какой указатель на базовый класс?
Возвращаемое значение тут не описать, потому как разные типы. Надо для этого возвращать объекты класса по ссылке или по указателю. При этом создавать их придётся динамически (через new). Тогда у двух разных типов возврата будет общий coercable тип.
Обсуждают сегодня