ereOn
He estado haciendo C ++ durante mucho tiempo, pero esta mañana me encontré con una pregunta a la que no pude responder: “¿Es posible crear alias para espacios de nombres en C ++?”
Déjame dar un ejemplo. Digamos que tengo el siguiente encabezado:
namespace old
{
class SomeClass {};
}
Que, por razones no especificadas, tuvo que convertirse en:
namespace _new
{
namespace nested
{
class SomeClass {}; // SomeClass hasn't changed
}
}
Ahora, si tengo una base de código antigua que se refiere a SomeClass
puedo “arreglar” rápidamente (y suciamente) el cambio agregando:
namespace old
{
typedef _new::nested::SomeClass SomeClass;
}
Pero hay alguna manera de importar todo de _new::nested
en old
sin tener que typedef
explícitamente cada tipo?
Algo similar a Python import * from ...
.
Gracias.
using namespace new::nested;
O si realmente quieres un alias real:
namespace on = one::nested;
-
El segundo es mucho mejor que el primero… el primero no crea un alias, sino que trae los símbolos del otro espacio de nombres y eso podría terminar en conflictos de nombres o resultados no deseados (si una función se sobrecarga en el
nested
el espacio de nombres es una mejor coincidencia que una sobrecarga en el espacio de nombres actual, de repente cambiará su selección)– David Rodríguez – dribeas
24 de mayo de 2011 a las 10:44
-
@David: Sí, pero parece resolver el problema que parece tener el OP. 🙂
– Xeo
24 de mayo de 2011 a las 10:45
Este:
namespace old = newns::nested;
parecería ser lo que quieres.
new
es quizás un mal ejemplo para un nombre de espacio de nombres. 😉– Xeo
24 mayo 2011 a las 10:00