Работа с классами
Здравствуйте!
Столкнулся с проблемой. Не знаю, как к ней подойти.
Допустим, есть суперкласс и несколько подклассов, количество которых со временем будет расти. В этих классах имебтся статичные методы, имеющие один смысл, но работающие чуть по разному.
class Base { } class C1 : public Base { static void read(); static void write(); static void open(); static void close(); ... } class C2 : public Base { static void read(); static void write(); static void open(); static void close(); ... }
Мне нужно в зависимости от некоего строкового значения:
1) вызывать статичные методы нужного класса
2) создвавть экземпляры классов
Для вызова статичного метода просматривается следующий путь:
if (st == StringValue1) C1::read(); else if (st == StringValue2) C2::read(); ...
Для создания экземпляра:
Base *base{nullptr} ; if (st == StringValue1) base = new C1(); else if (st == StringValue2) base = new C2(); ...
И так далее. Для вызова каждого метода нужно создавать линейку if - else if, что громоздко и в последствие сложно сопровождаемо.
Вопрос, можно ли как-то это упростить? Можно ли указать список в одном месте, а потом вызывать методы?
Буду очень благодарен за помощь.
С уважением, Григорий
Вам це подобається? Поділіться в соціальних мережах!
- Останні коментарі
- AK24 квітня 2025 р. 12:04UPD: Переписал логику воспроизведения через стороннюю библиотеку BASS. Там выбрать можно
- AK01 квітня 2025 р. 11:41Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- Тепер обговоріть на форумі
- DT14 квітня 2025 р. 15:38Всем привет! На Qt 6.8 MinGW пытаюсь сделать управление подключением WiFi из программы. Пока делаю поддержку Windows, но так же хочу в дальнейшем внедрить и поддержку Linux/MacOS. Для…
- f15 лютого 2025 р. 13:46Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопреде…
Использовать switch и enum.
Если совсем красиво делать то применить шаблон ООП "Стратегия"
Спасибо.
Но разве в switch можно использовать строки, как ключи?
А чем поможет enum?