Y at-il une façon plus succincte de définir une classe dans un espace de noms que ceci:Définition d'une classe dans un espace de noms
namespace ns { class A {}; }
J'espérais quelque chose comme class ns::A {};
fonctionnerait, mais hélas pas.
Y at-il une façon plus succincte de définir une classe dans un espace de noms que ceci:Définition d'une classe dans un espace de noms
namespace ns { class A {}; }
J'espérais quelque chose comme class ns::A {};
fonctionnerait, mais hélas pas.
Vous êtes proche, vous pouvez transférer déclarer la classe dans l'espace, puis le définir en dehors si vous voulez:
namespace ns {
class A; // just tell the compiler to expect a class def
}
class ns::A {
// define here
};
Ce que vous ne pouvez pas faire est de définir la classe dans l'espace de noms sans membres et définir la classe à nouveau en dehors de l'espace de noms. Cela viole la règle de définition unique (ou un non-sens).
Non, vous ne pouvez pas. Pour citer le standard C++, section 3.3.5:
Un nom déclaré à l'extérieur tous nommés ou espaces de noms sans nom (7.3), les blocs (6.3), le plaisir (8.3.5), la fonction définitions (8.4) et classes (clause 9) a une portée espace de nommage global
Ainsi, la déclaration doit être à l'intérieur d'un bloc d'espace de nom - la définition peut bien sûr être à l'extérieur.
, classe A {}; est une définition, pas une déclaration. Êtes-vous sûr que la citation est applicable, alors? –
définitions sont des déclarations –
um qui n'a pas été bien pensé - mais je suis sûr que la citation s'applique - je vais jeter un autre coup d'oeil. –
La section vous devriez lire ceci:
7.3.1.2 Définitions membres Namespace
3 Chaque nom d'abord déclaré dans un espace de noms est membre de cet espace de noms [.... ]
Notez le terme - déclaration pour que D.Shawley (et son exemple) soit correct.
Vous pouvez le faire, mais ce n'est pas vraiment plus succint.
namespace ns {
class A;
}
class ns::A {
};
Ou
namespace ns {
class B;
}
using ns::B;
class B {
};
bien
merci. ce n'est pas plus succinct mais cela semble logique. –
Je ne pense pas qu'il existe vraiment une version plus succincte ou plus lisible que 'namespace ns {class A {}; } 'mais c'est probablement juste une opinion personnelle. –
C'est la séparation de la déclaration et de la définition. – Shaowu