Есть базовый класс A. Есть наследник В. И есть наследник наследника С.
Есть некая структура данный. Она парсится из файла.
Если в этой структуре все поля после парсинга заполнились — то на основе этой структуры создается класс С.
Если каких-то полей нет, но чуть больше чем совсем минимум — то создается класс В
А если совсем только базовый минимум полей заполнились из файла, то создается объекта класса А.
Ясно, что тупым «if» проверяя поля структуры можно проверять какой именно класс создавать. Но что-то некрасиво как-то. Можно как-то стильно модно молодежно, С++-но и по последним стандартам с сотней шаблонов и SFINAE разрулить создание нужного класса на основе прочитанной структуры?