Hola y buen día para ti.C++: fuerza compilación de plantilla completa (MSVC/G ++)
fragmento de código siguiente se compila en cl.exe (15.00.30729.01) y MinGW-g ++ (4.4.0):
template<typename T> class Test{
public:
T t;
void error(){
int doesNotExist = 6;
return doesNotExist;//<---- void function returning result
}
};
int main(int argc, char** argv){
Test<int> test;
return 0;
}
Además, en cl.exe que incluso puede salirse con algo como esto:
template<typename T> class Test{
public:
T t;
void error(){
doesNotExist = 6;//<---- undeclared variable
return doesNotExist;//<---- void function returning result
}
};
Ahora, esto obviamente sucede porque el compilador no crea contenidos para los métodos de una clase de plantilla hasta que alguien los llama. Sin embargo, esto puede plantear problemas cuando diseñas una clase de plantilla grande (porque es muy probable que olvides agregar una llamada de prueba al nuevo método en alguna parte).
La pregunta:
¿Hay un modificador de compilador de g ++ o cl.exe que obligaría compilador para procesar toda la plantilla (por lo que este fragmento de código se disparará error de compilación)?
Sí, la instanciación de plantilla explícita es lo que desea. También vea: http://msdn.microsoft.com/en-us/library/by56e477%28VS.80%29.aspx –
Buena explicación del propósito real de no tener error de compilación. – iammilind
Bien, funciona. Acepto tu respuesta, pero no fue realmente necesario explicar POR QUÉ funciona de esta manera (ya lo sabía). Gracias por la respuesta. – SigTerm