Utilice la versión de la clase sin plantilla como principal

Estoy trabajando en portar un proyecto de C# a C ++ y estoy teniendo un problema al usar plantillas, necesito tener una versión sin plantilla y otra con plantilla de una clase con una parentada a otra, es decir:

class DataBuffer//Holds generic databuffer functions (getting size in bytes etc)
{
public:
    int32 getVal() { return 10; }
};

template 
class DataBuffer : public DataBuffer//Able to retrieve data as a type...
{
public:
    int32 getSizeOfT() { return sizeof(T); }
};

Tengo métodos que aceptan cualquier tipo de DataBuffer como parámetro, por lo que no es posible crear plantillas de toda la clase, ¿hay alguna forma de hacerlo sin cambiar el nombre de la clase base?

Cualquier ayuda sería muy apreciada.

EDITAR: Este código no se compila y arroja el siguiente error en tiempo de compilación:

error C2989: 'DataBuffer' : class template has already been declared as a non-class template
0
No puedes crear más de una clase con el mismo nombre.
agregado el autor Jonathan Wood, fuente

3 Respuestas

Lamentablemente, no hay forma de hacerlo. Creo que la parte relevante del estándar es:

Una plantilla de clase no debe tener el mismo nombre que cualquier otra plantilla,   clase, función, objeto, enumeración, enumerador, espacio de nombres o tipo   en el mismo alcance (3.3), excepto como se especifica en (14.5.4). Excepto eso   una plantilla de función puede ser sobrecargada por (sin plantilla)   funciones con el mismo nombre o por otras plantillas de funciones con el   mismo nombre (14.8.3), un nombre de plantilla declarado en el ámbito del espacio de nombres o en   el alcance de clase debe ser único en ese alcance.

Sin embargo, los métodos que deberían aceptar todo tipo de DataBuffer también podrían convertirse en plantillas, de modo que heredar de una base común sería innecesario.

0
agregado
Decidí modificar la clase de buffer de datos para que solo tenga métodos con plantillas, de esta forma puedo continuar usando mis funciones/métodos como estaban. Gracias por tu ayuda.
agregado el autor Mattiemus, fuente

Tendrá que asignar diferentes nombres a la clase y a la plantilla de clase o ponerlos en diferentes espacios de nombres: las clases y las plantillas de clase no pueden tener exactamente el mismo nombre.

0
agregado

Como dice el error, una plantilla de clase no puede tener el mismo nombre que una plantilla no.

Deberá cambiar el nombre de la clase base o la plantilla.

0
agregado