EVAL.P2

1. Definición :
librería estándar de C++ ofrece un archivo de cabecera de forward declarations de las clases de entrada y salida a flujos de bytes (iostreams):
#include <iosfwd>
De esta forma podemos utilizar los tipos ostream, istream, etc. sin necesidad de traer la definición de todas las clases de entrada y salida. Generalmente deberíamos utilizar el <iosfwd> en nuestro .h cuando no hagamos un mayor uso que sólo referenciarlas. Un ejemplo:
#ifndef EMPLEADO_IO_H
#define EMPLEADO_IO_H
#include <iosfwd> // forward declaration de ostream
class Empleado; // forward declaration de nuestro tipo
// Aquí no necesitamos conocer el tamaño ni de Empleado,
// declarations.
// ni de ostream, podemos compilar sólo con sus forward
#endif
void write_empleado_en_formato_binario(const Empleado&, ostream&);
2. Regla:
Siempre intenta usar las forward declarations antes que incluir los archivos de cabecera que definen las clases, los cuales suelen mostrar detalles de implementación que son propensos a cambiar. Siguiendo esta regla mejoraremos el tiempo de compilación y la cantidad de archivos a compilar al realizar una modificación en un .h.
Para más información, ver la sección 27.3 Forward declarations [iostream.forward] del último borrador público del estándar de C++
ejemplo:
namespace std {
  template<class charT> struct char_traits;
  template<> class char_traits<char>;
  template<> class char_traits<wchar_t>;

  template<class T> class allocator;

  template <class charT, class traits=char_traits<charT> > class basic_ios;
  template <class charT, class traits=char_traits<charT> > class basic_streambuf;
  template <class charT, class traits=char_traits<charT> > class basic_istream;
  template <class charT, class traits=char_traits<charT> > class basic_ostream;
  template <class charT, class traits=char_traits<charT> > class basic_iostream;
 
 template <class charT, class traits=char_traits<charT>, class Alloc=allocator<charT> >
    class basic_stringbuf;
  template <class charT, class traits=char_traits<charT>, class Alloc=allocator<charT> > 
    class basic_istringstream;
  template <class charT, class traits=char_traits<charT>, class Alloc=allocator<charT> >
    class basic_ostringstream;
  template <class charT, class traits=char_traits<charT>, class Alloc=allocator<charT> >
    class basic_stringstream;

  template <class charT, class traits=char_traits<charT> > class basic_filebuf;
  template <class charT, class traits=char_traits<charT> > class basic_ifstream;
  template <class charT, class traits=char_traits<charT> > class basic_ofstream;
  template <class charT, class traits=char_traits<charT> > class basic_fstream;

  template <class charT, class traits=char_traits<charT> > class istreambuf_iterator;
  template <class charT, class traits=char_traits<charT> > class ostreambuf_iterator;

  template<class stateT> class fpos;

  typedef basic_ios<char>              ios;
  typedef basic_streambuf<char>        streambuf;
  typedef basic_istream<char>          istream;
  typedef basic_ostream<char>          ostream;
  typedef basic_iostream<char>         iostream;
  typedef basic_stringbuf<char>        stringbuf;
  typedef basic_istringstream<char>    istringstream;
  typedef basic_ostringstream<char>    ostringstream;
  typedef basic_stringstream<char>     stringstream;
  typedef basic_filebuf<char>          filebuf;
  typedef basic_ifstream<char>         ifstream;
  typedef basic_ofstream<char>         ofstream;
  typedef basic_fstream<char>          fstream;

  typedef basic_ios<wchar_t>           wios;
  typedef basic_streambuf<wchar_t>     wstreambuf;
  typedef basic_istream<wchar_t>       wistream;
  typedef basic_ostream<wchar_t>       wostream;
  typedef basic_iostream<wchar_t>      wiostream;
  typedef basic_stringbuf<wchar_t>     wstringbuf;
  typedef basic_istringstream<wchar_t> wistringstream;
  typedef basic_ostringstream<wchar_t> wostringstream;
  typedef basic_stringstream<wchar_t>  wstringstream;
  typedef basic_filebuf<wchar_t>       wfilebuf;
  typedef basic_ifstream<wchar_t>      wifstream;
  typedef basic_ofstream<wchar_t>      wofstream;
  typedef basic_fstream<wchar_t>       wfstream;

  typedef fpos<mbstate_t> streampos;
  typedef fpos<mbstate_t> wstreampos;
}

No hay comentarios:

Publicar un comentario