Работа с классами
Здравствуйте!
Столкнулся с проблемой. Не знаю, как к ней подойти.
Допустим, есть суперкласс и несколько подклассов, количество которых со временем будет расти. В этих классах имебтся статичные методы, имеющие один смысл, но работающие чуть по разному.
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, что громоздко и в последствие сложно сопровождаемо.
Вопрос, можно ли как-то это упростить? Можно ли указать список в одном месте, а потом вызывать методы?
Буду очень благодарен за помощь.
С уважением, Григорий
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
- Геній
- Sept. 13, 2024, 7:46 p.m.
C++ - Test 001. The first program and data types
- Result:66points,
- Rating points-1
- torgaev_2024
- Sept. 8, 2024, 1:20 p.m.
C++ - Test 001. The first program and data types
- Result:33points,
- Rating points-10
Использовать switch и enum.
Если совсем красиво делать то применить шаблон ООП "Стратегия"
Спасибо.
Но разве в switch можно использовать строки, как ключи?
А чем поможет enum?