Entiendo los problemas que puede tener cuando pone una declaración using
dentro de un archivo de encabezado, por lo que no quiero hacer eso. En cambio, traté de poner el using
(o un namespace foo =
) dentro de la declaración de clase, para reducir el tipado repetitivo dentro del archivo de encabezado. Lamentablemente, recibo errores de compilación. Parece que sería una característica útil.¿Por qué no puedo poner una declaración de "uso" dentro de una declaración de clase?
#ifndef FOO_H
#define FOO_H
// This include defines types in namespace gee::whiz::abc::def,
// such as the class Hello.
#include "file_from_another_namespace.h"
// using namespace gee::whiz::abc::def; // BAD!
namespace x {
namespace y {
namespace z {
struct Foo {
using namespace gee::whiz::abc::def; // Illegal.
namespace other = gee::whiz::abc::def; // Illegal.
// Foo(gee::whiz::abc::def::Hello &hello); // annoyingly long-winded
Foo(other::Hello &hello); // better
//...
};
} } } // end x::y::z namespace
#endif // FOO_H
En el código real, los nombres de espacios de nombres son mucho más largo y molesto y no es algo que pueda cambiar.
¿Alguien puede explicar por qué esto no es legal o (mejor) si hay una solución alternativa?
Esto todavía contaminará el espacio de nombres, que es lo que está tratando de evitar. – Trent
No si se usa dentro de la declaración de clase. –
Sí, eso funciona! Y si lo hago un typedef privado, entonces otro código no puede usarlo accidentalmente. – Dan