каждая из которых в свою очередь хранит заголовок пункта меню, код клавиши и указатель на вызываемую функцию. Написал рабочий вариант, обрадовался, стал пользоваться. Но теперь пришла идея сделать класс отдельной библиотекой, и улучшить саму систему. Я посчитал, что Case, который хранит и указатель на функцию, и указатель на подменю, это неправильно, ведь функциональный кейс все равно никогда не будет подменю. Поэтому я создал абстрактный базовый класс Case, от которого унаследовал 2 разных Case (рис 2)
Как я и сказал, в самом классе Menu список пунктов представлен как вектор указателей vector<Case* > menu; ведь указатель базового класса может хранить наследника. Но очень скоро я столкнулся с проблемой: В первой версии вывод меню был в цикле (рис 3)
где current это тот же вектор кейсов, то есть мейн меню или одно из подменю. Но в новом варианте с Case в виде базового класса, я уже не могу получить доступ к полям с указателем на функцию или подменю, ведь current не знает, какой именно наследник в нем хранится. Да и к полям, которые определены в самом Case доступа тоже нет, т.к. класс абстрактный. И вот самая суть проблемы: нужно создать коллекцию, которая будет хранить 2 разных типа кейсов, но в то же время при обходе этой коллекции нужно во-первых иметь доступ к полю с кодом символа, чтобы найти нужный кейс, а во-вторых, в зависимости от типа этого кейса выполнить то или иное действие (вызвать переданную функцию, либо вызвать подменю).Изучать ООП я начал не так давно, но мне просто не у кого спросить совета, так что буду рад любым идеям и наставлениям
Но возможно ли сделать полиморфное поле? Просто получается так, что мне нужно, чтобы 1 наследник хранил указатель на функцию, а другой - указатель на меню? Может в таком случае удобнее вместо указателя использовать Function<>? Сейчас пробую добиться этого полиморфизма через шаблоны, но пока ещё разбираюсь