¿Es posible reenviar declarar un contenedor STL en un archivo de encabezado? Por ejemplo, tomemos el siguiente código:Reenviar declarar un contenedor STL?
#include <vector>
class Foo
{
private:
std::vector<int> container_;
...
};
Quiero ser capaz de hacer algo como esto:
namespace std
{
template <typename T> class vector;
}
class Foo
{
private:
std::vector<int> container_;
...
};
se puede hacer esto?
Seguí tu enlace a la discusión, pero la gente no parece llegar a una conclusión. Aparentemente, la implementación stl no debe agregar ningún parámetro de plantilla a los contenedores estándar. por lo tanto, se debe permitir reenviar declarar la plantilla. – Haplo
No está definido, @Haplo. Si la implementación * que * usa usted elige definir el comportamiento más allá de lo que dice el estándar, eso es genial, pero aún no está definido, por lo que su código no será portátil. La conclusión (a juzgar por las declaraciones no cuestionadas) es que el estándar debería permitirlo, pero no es así, y que hay dos soluciones: ajustar los tipos estándar en las estructuras de usuario declaradas hacia delante, o solo morder el viñeta e incluir el encabezado estándar . Esto último es fácil de hacer. –
"Las declaraciones dejadas sin respuesta" en Usenet son apenas una fuente autorizada. Pero, Jerry Coffin tiene razón cuando cita [namespace.std]/1. En la práctica, si el compilador diagnostica las declaraciones 'namespace std' en encabezados que no son del sistema, o si su biblioteca estándar no está implementada en C++, entonces podría tener un problema, pero esas cosas nunca suceden. – Potatoswatter