¿Cómo subclasificar una clase base con plantilla?

Tengo las siguientes estructuras de datos:

struct fastEngine { ... }
struct slowEngine { ... }

template<typename T>
class Car {
   T engine;
   vector<T> backupEngines;

   virtual void drive() = 0;
}

class FastCar : public Car<fastEngine> {
   virtual void drive() {
      // use the values of "engine" in some way
   }
}

class SlowCar : public Car<slowEngine> {
   virtual void drive() {
      // use the values of "engine" in some way
   }
}

Car* getCarFromCarFactory() {  // 1
   if (randomNumber == 0)
      return new FastCar();
   else
      return new SlowCar();
}

void main() {
   Car* myCar = getCarFromCarFactory(); // 2
   myCar->drive();
}

El compilador se queja en las ubicaciones 1 y 2 porque requiere que yo definaCoche* con parámetros de plantilla. No me importa qué versión de plantilla deCoche Estoy usando, solo quiero un puntero a unCoche que yo puedo conducir. losmotor Las estructuras deben ser estructuras porque son de código existente y no tengo control sobre ellas.

Respuestas a la pregunta(2)

Su respuesta a la pregunta