Cómo diseñar alrededor de la limitación de que las funciones miembro con plantilla no pueden ser virtuales

Me estoy topando con un problema de diseño donde (en C ++) me gustaría que una función miembro con plantilla (de una clase sin plantilla) sea virtual y me pregunto si hay una forma buena y elegante de solucionar el problema.

El escenario va, tengomaquinas eseproceso genéricoartículos. Yo uso una clase base abstracta paramaquinas con un virtualproceso (Item) Función para que cada máquina pueda definir su propio método de procesamiento único. El problema es que los elementos también son "genéricos", ya que exponen ciertas interfaces para la forma en que se pueden procesar. Por razones (principalmente para el rendimiento ... sin gastos generales), me gustaría usar el polimorfismo en tiempo de compilación para estos elementos. De modo que ahora cada máquina tendría una interfaz como:

class Machine
{ public:
    template <typename T>
    virtual void process(T& item) = 0; 
};

Sin embargo, esto es imposible en C ++ ya que las funciones miembro con plantilla no pueden ser virtuales. ciertamente puedo hacer que la clase de máquina tenga una plantilla en el tipo de artículo T, pero esto añade más dolores de cabeza para mí en el esquema de diseño más amplio y realmente ninguna otra parte de la clase de máquina depende del artículo ... es solo un argumento de la función process () .

¿Hay alguna forma mejor de evitar esto o alguna sugerencia sobre cómo proporcionar este tipo de familia genérica de máquinas que procesan una familia de elementos genéricos (donde los elementos utilizan polimorfismo en tiempo de compilación)? Estoy fuera de lo profundo en términos de mi diseño.

Agradecemos cualquier sugerencia

Respuestas a la pregunta(1)

Su respuesta a la pregunta