Renombrar espacios de nombres

1 minuto de lectura

Avatar de usuario de ereOn
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 SomeClasspuedo “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.

  • new es quizás un mal ejemplo para un nombre de espacio de nombres. 😉

    – Xeo

    24 mayo 2011 a las 10:00

using namespace new::nested;

Ejemplo en Ideone.

O si realmente quieres un alias real:

namespace on = one::nested;

Ejemplo en Ideone.

  • 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.

¿Ha sido útil esta solución?