![]() |
Часто возникает задача когда нужно создать несколько классов, у которых будут одинаковые названия методов, но разная их реализация, а потом работать с ними так, будто это один класс. Очевидным решением в такой ситуации становятся шаблоны:
C++: [CODE] class A { public : int get ( ) { return 0 ; } } ; class B { public : int get ( ) { return 1 ; } } ; template class C { public : T obj ; void main ( ) { std :: cout Но допустим, тип поля obj должен определяться условно и не просто во время работы программы, а уже после создания экземпляра класса C без его разрушения, кол-во возможных типов при этом может быть ограничено. Сейчас приходится нагромождать кучу костылей: сначала создавать enum ClassType с названиями всех типов, потом в классе C создавать поле для каждого типа (A objA, B obj B), а потом в каждой функции мучиться с оператором switch(ClassType) — это неудобно и выглядит отвратительно. Потребность ведь совсем ненадуманная, она может возникнуть в любой большой программе. Как в таком случае организуют код опытные разработчики? |
Наследуйся от общего класса с виртуальным методом get() и переопределяй в дочерних. А поле делай как unique_ptr на базовый класс
|
Цитата:
|
Цитата:
|
Цитата:
|
| Время: 03:12 |