template - typename c++
¿Cómo crear una función de plantilla dentro de una clase?(C++) (3)
Sí, las funciones de los miembros de la plantilla son perfectamente legales y útiles en numerosas ocasiones.
La única advertencia es que las funciones de los miembros de la plantilla no pueden ser virtuales.
Sé que es posible hacer una función de plantilla:
template<typename T>
void DoSomeThing(T x){}
y es posible hacer una clase de plantilla:
template<typename T>
class Object
{
public:
int x;
};
pero, ¿es posible hacer una clase que no esté dentro de una plantilla, y luego hacer una función en esa clase una plantilla? Es decir:
//I have no idea if this is right, this is just how I think it would look
class Object
{
public:
template<class T>
void DoX(){}
};
o algo en la medida en que la clase no es parte de una plantilla, pero la función es?
Tu conjetura es la correcta. Lo único que debe recordar es que la definición de plantilla de función miembro (además de la declaración) debe estar en el archivo de encabezado, no en la cpp, aunque no tiene que estar en el cuerpo de la declaración de clase.
Vea aquí: Templates , métodos de plantillas , Plantillas de miembros, Plantillas de funciones de miembros
class Vector
{
int array[3];
template <class TVECTOR2>
void eqAdd(TVECTOR2 v2);
};
template <class TVECTOR2>
void Vector::eqAdd(TVECTOR2 a2)
{
for (int i(0); i < 3; ++i) array[i] += a2[i];
}