2010-04-23 17 views
7

que tienen clase no molde con un constructor a plantillas. Este código compila para mí. Pero recuerdo que en alguna parte me he referido a que los constructores no pueden ser plantillas. ¿Alguien puede explicar si este es un uso válido?¿Los constructores de C++ pueden ser plantillas?

typedef double Vector; 

//enum Method {A, B, C, D, E, F}; 
struct A {}; 

class Butcher 
{ 
public: 
template <class Method> 
Butcher(Method); 


private: 
Vector a, b, c; 
}; 

template <> 
Butcher::Butcher(struct A) 
: a(2), b(4), c(2) 
{ 
// a = 0.5, 1; 
// b = -1, 1, 3, 2; 
// c = 0, 1; 
} 

Gracias, Gokul.

+1

De hecho, todos los contenedores STL tienen al menos un constructor a plantillas. (Ese es el que toma dos iteradores de cualquier tipo de iterador compatible). – sbi

Respuesta

12

Sí, los constructores pueden ser plantillas.

13

Es perfectamente válido que los constructores sean miembros de la plantilla. La única cosa que puedo pensar que es posible que se piensa que es un constructor de plantilla no es un constructor de copia por lo que un constructor de la plantilla en sí no impedir la generación de un compilador genera constructor de copia.

+4

tardó 2 minutos para entender lo que quiere decir en la segunda oración :) – chester89

+1

Sería mejor decir que "los constructores de copia no pueden ser miembros de plantilla". –

Cuestiones relacionadas