Прошу помощи с выводом типа
От: _agg  
Дата: 05.10.21 08:45
Оценка:
Привет, в новых версиях С++ появился новый вывод типов с помощью auto, я его использую, но в довольно простых случаях, но тут понадобилось более сложный вариант и я пока не могу сообразить как сделать:
enum class TYPES {
    STR = 0,
    INT
};

class Base {
public:
    virtual ~Base() = default;
    TYPES GetType() {
        return type;
    }
protected:
    Base(TYPES t) : type(t) {}
private:
    TYPES type;

};

template<class T> class Child final : public Base {
public:
    Child(TYPES type) : Base(type)  {}
    ~Child() = default;
    void Create() {} 
    T& GetT(){
    return t;    
    }
private:
    T t;
};


В функции main в vector добавляем элементы типа Base:
int main() {
    std::vector<Base> vec;
    vec.push_back(Child<std::string>(TYPES::STR));
    vec.push_back(Child<int>(TYPES::INT));    
}


После этого добавления хотелось бы написать функцию которая будет возвращать нужный шаблонный тип из Base что то вроде этого:
static Child<auto> GetType(Base& base) {   // в этой строке ошибка так нельзя, но хотелось бы что то вроде этого
    if (base.GetType() == TYPES::STR) {
        return dynamic_cast<Child<std::string>&>(base);
    }
    else if(base.GetType() == TYPES::INT){
        return dynamic_cast<Child<int>&>(base);
    }
}


Все это нужно что бы можно было сделать примерно так:
     GetType(vec[0]).GetT();


Подскажите плиз кто хорошо разбирается в выводе типов как такую штуку изобразить на новом C++.
Отредактировано 05.10.2021 9:59 _agg . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.