Альтернативой является наличие чистого виртуального CreateCopy() метода в общей базе, который реализуется в каждом производном классе.
CreateCopy()