Лучший вариант в приведенном выше сценарии - использовать static_cast.Соответствующий фрагмент кода будет выглядеть следующим образом:
Base* string_to_struct7(std::string s) {
if(s== "Derived1") {
return new Derived1();
} else if(s == "Derived2") {
return new Derived2();
} else {
return new Base();
}
, а затем для дальнейшей обработки:
auto t = string_to_struct7(s);
auto bb7 = static_cast<Derived1*>(t);
std::cout << bb7->name<< std::endl;
, что именно то, что я хочу получить.Производные члены класса теперь могут быть адресованы напрямую.
Ответ Макса Лангофа, конечно, также действителен.Использование просто Java-методов, подобных методам получения, работает, но имеет недостаток: они должны быть определены в каждом классе для каждого члена класса, что может быстро выйти из-под контроля.
Дополнительную информацию также можно найти здесь: C ++ Доступ к производному члену класса из указателя базового класса
РЕДАКТИРОВАТЬ: Третий подход заключается в использовании объекта-оболочки внутри производных классов и метода виртуального геттера.В настоящее время я не могу думать о недостатке - кроме того, чтобы быть уродливым.