Теперь вопрос в том, как вы используете Derived
класс?
- вы используете его явно, и polymorphi c вызов
function()
не выполняется? - или делаете вы храните эту фабрику в некотором хранилище, и
function()
вызывается полиморфно c way - или вы используете это в некоторых шаблонах
В первом случае просто предоставьте функцию с другое имя , затем вы можете вызывать эту функцию, когда необходим указатель на производный класс.
Во втором случае вам не следует пытаться убедить компилятор, что вы возвращаете производный класс, так как вызов polymorphi c будет скрывать это все равно.
В последнем случае просто используйте CRTP в качестве другого предложенного ответа (некоторые называют это полиморфизмом stati c) и отбросьте виртуальное ключевое слово.