Dada una clase de plantilla como la siguiente:
template<typename Type, typename IDType=typename Type::IDType>
class Mappings
{
public:
...
Type valueFor(const IDType& id) { // return value }
...
};
¿Cómo puede alguien declarar adelante esta clase en un archivo de encabezado?
c++
templates
forward-declaration
Tron Thomas
fuente
fuente
Puede declarar argumentos predeterminados para una plantilla solo para la primera declaración de la plantilla. Si desea permitir que los usuarios reenvíen una plantilla de clase, debe proporcionar un encabezado de reenvío. Si desea reenviar la declaración de la plantilla de clase de otra persona utilizando valores predeterminados, ¡no tiene suerte!
fuente
Usted puede declarar una clase de plantilla cuya definición establece los argumentos por defecto, pero cada vez se hace referencia a la clase debe incluir todos sus argumentos hasta que se introduce la definición.
p.ej. Usemos
std::vector
sin incluirlo (el segundo argumento destd::vector
está definido con un valor predeterminado):Luego podemos usarlo sin incluir el vector, por ejemplo:
Y podemos usarlo con
std::vector
, por ejemplo:No he comprobado los estándares, pero esto funciona en
clang
/gcc
con-std=c++98
hasta-std=c++17
, por lo que si no es oficialmente un estándar, parece que no lo es oficialmente.fuente
Foo<> foo;
.