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



Answers

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

De acuerdo con eso, es para permitir la versión de compatibilidad hacia atrás. Usted define múltiples espacios de nombres internos, y hace que el más reciente en inline . O de todos modos, el predeterminado para las personas que no se preocupan por el control de 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 veo de inmediato por qué no pones using namespace V99; dentro del espacio de nombres Mine , pero no tengo que entender completamente el caso de uso para tomar la palabra de Bjarne sobre la motivación del comité.

Question

C ++ 11 permite inline namespace , todos los miembros también están automáticamente en el namespace adjunto. No puedo pensar en ninguna aplicación útil de esto. ¿Puede alguien dar un breve y sucinto ejemplo de una situación en la que 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 residir en diferentes archivos. ¿No es esto un problema?)




Related