У меня странный вариант использования.Вот очень упрощенная версия.
Допустим, у меня есть класс Base
и классы DerivedOne
и DerivedTwo
, которые являются производными от класса Base
.
Тогда,есть перечисление:
enum DerClasses {Derived1, Derived2};
и функция, которая будет принимать перечисление и возвращать экземпляр производного класса, в зависимости от значения.
Что-то вроде:
inline Base* create_instance(DerClasses enum_class){
switch(enum_class) {
case Derived1:
return new Derived1();
case Derived2:
return new Derived2();
}
}
Очевидно, что это работает, но только с последующим приведением к производному классу.
Derived1 *derived_pointer = dynamic_cast<Derived1*>(pointer);
И я не хочу, чтобы пользователи сами делали эти динамические приведения или даже знали что-либо оклассы.
Можно ли как-то скрыть эти приведения и создать API с автоматическим выводом типа, например
auto ptr = create_instance(DerClasses::Derived1);
ptr->derived1_class_only_variable = 123;