c++ ¿Para qué son los espacios de nombres en línea?


1 Answers

http://www.stroustrup.com/C++11FAQ.html#inline-namespace (un documento escrito y mantenido por Bjarne Stroustrup, que usted pensaría que debería conocer la mayoría de las motivaciones para la mayoría de las funciones de C ++ 11. )

De acuerdo con eso, es para permitir la creación de versiones para la compatibilidad con versiones anteriores. Usted define múltiples espacios de nombres internos, y hace que el más reciente esté en inline . O de todos modos, el predeterminado para las personas que no se preocupan por las versiones. Supongo que la más reciente podría ser una versión futura o de vanguardia que aún no está predeterminada.

El ejemplo dado es:

// file V99.h:
inline namespace V99 {
    void f(int);    // does something better than the V98 version
    void f(double); // new feature
    // ...
}

// file V98.h:
namespace V98 {
    void f(int);    // does something
    // ...
}

// file Mine.h:
namespace Mine {
#include "V99.h"
#include "V98.h"
}

#include "Mine.h"
using namespace Mine;
// ...
V98::f(1);  // old version
V99::f(1);  // new version
f(1);       // default version

No entiendo de inmediato por qué no using namespace V99; dentro de namespace Mine , pero no tengo que entender completamente el caso de uso para tomar la palabra de Bjarne sobre la motivación del comité.

c++ namespaces c++11 inline-namespaces

C ++ 11 permite inline namespace , todos los miembros de los cuales también se encuentran automáticamente en el namespace adjunto. No puedo pensar en ninguna aplicación útil de esto. ¿Alguien puede dar un ejemplo breve y conciso de una situación donde se necesita un inline namespace y donde es la solución más idiomática?

(Además, no me queda claro qué sucede cuando un namespace se declara en inline en una, pero no en todas las declaraciones, que pueden estar en archivos diferentes. ¿No es esto un problema?)



Related