Tengo un código de plantilla que preferiría tener almacenado en un archivo CPP en lugar de en línea en el encabezado. Sé que esto se puede hacer siempre que sepa qué tipos de plantilla se utilizarán. Por ejemplo:Almacenamiento de definiciones de función de plantilla C++ en un archivo .CPP
archivo .h
class foo
{
public:
template <typename T>
void do(const T& t);
};
archivo .cpp
template <typename T>
void foo::do(const T& t)
{
// Do something with t
}
template void foo::do<int>(const int&);
template void foo::do<std::string>(const std::string&);
Nota las dos últimas líneas - la función de plantilla foo :: hacerlo sólo se utiliza con enteros y std :: strings, entonces esas definiciones significan que la aplicación enlazará.
Mi pregunta es: ¿es esto un hack desagradable o esto funcionará con otros compiladores/vinculadores? Solo estoy usando este código con VS2008 en este momento pero querré portar a otros entornos.
No tenía idea de que esto fuera posible, ¡un truco interesante! Hubiera sido útil para algunas tareas recientes saber esto, ¡salud! – xan
Lo que me sobresalta es el uso de 'do' como identificador: p – Quentin
he hecho algo similar con gcc, pero sigo investigando – Nick