обычно вдумчивое осознавание факта, что в любой точке программы известен конкретный статический тип любого объекта, приводит к решению проблемы
Я бы еще добавил, что вытаскивание конкретного типа после стирания происходит всегда через switch case (явный или спрятанный в кишках std::visit). Либо конкретный тип не нужен и используется виртуальные функции.
на самом деле это абсолютно ничем не отличается от std::variant + std::visit просто здесь множество возвращаемых значений описывается не внутри variant, а всеми перегрузками визитора
на самом деле это абсолютно ничем не отличается от std::variant + std::visit просто здесь множество возвращаемых значений описывается не внутри variant, а всеми перегрузками визитора
кстати, как по мне это даже хуже, поскольку если внутрь factory нужно будет добавить еще несколько создаваемых типов, то возможно придется дописывать всех визиторов
Кстати если нужно type erasure на открытый сет. std::any имеет очень ограниченный интерфейс. Это бывает очень неудобным. В boost.type_erasure можно создать свой any на котором будут работать те операции, которые попросишь (естественно они должны быть реализованы во всех типах, которые кладутся в этот any).
Кстати если нужно type erasure на открытый сет. std::any имеет очень ограниченный интерфейс. Это бывает очень неудобным. В boost.type_erasure можно создать свой any на котором будут работать те операции, которые попросишь (естественно они должны быть реализованы во всех типах, которые кладутся в этот any).
Посоветуйте, пожалуйста. Есть функция-фабрика, которая конструирует шаблонный класс. Проблема в том, что шаблонные параметры определяется в рантайме, они заранее не известны, и даже их (параметров) число может различаться. Функция может сконструировать нужный класс, но не может вернуть, потому что не известен возвращаемый тип на этапе компиляции. Есть какой-то приём для такой ситуации?