vectors librerias libreria iterador estandar ejemplos ejemplo dev c++ stl header

c++ - librerias - ¿Reenviar declarar un contenedor STL?



vector stl c++ ejemplos (3)

Declarar vector en el std nombres std es un comportamiento indefinido . Por lo tanto, su código podría funcionar, pero también podría no ser así, y el compilador no está obligado a informarle cuándo su intento no funcionará. Eso es una apuesta, y no sé si vale la pena evitar la inclusión de un encabezado C ++ estándar.

Consulte la siguiente discusión moderada comp.std.c ++.

forward declarando std :: vector. Funciona, pero ¿es legal y cumple con las normas?

¿Es posible reenviar declarar un contenedor STL en un archivo de encabezado? Por ejemplo, tome el siguiente código:

#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?


No lo creo porque el compilador no tendría forma de saber cuánto espacio asignar para el objeto container_ . Lo mejor que puedes hacer:

std::vector<int> *container_;

y nuevo en el constructor, ya que el compilador conoce el tamaño de un puntero.


Además de lo que dijeron los demás (excepto Adam Rosenfield), puede que le resulte útil saber que existe una forma aprobada de iostreams de declaración anticipada y algunas plantillas relacionadas: El encabezado <iosfwd> (vea http://msdn.microsoft. com / en-us / library / 1af12yty% 28VS.80% 29.aspx ). Sería útil si el estándar tuviera más de tales encabezados.