Можете ли вы иметь тип возвращаемого общего указателя родительского класса функции, а затем возвращать новый дочерний класс, не являющийся общим указателем? Я не уверен, как в таких ситуациях работают общие указатели, действуют ли они как обычные указатели? Вот мой пример:
BaseEventPtr Actions::getEvent(const std::string& nodeName)
{
if(asLowerCaseString(nodeName) == "action")
return new ActionEvent(&m_interface);
return nullptr;
}
В этой ситуации ActionEvent является подклассом BaseEvent.
Ваше здоровье!