Frage

Gibt es eine prägnante Art und Weise eine Klasse in einem Namespace als das zu definieren:

namespace ns { class A {}; }

Ich habe gehofft, so etwas wie class ns::A {}; funktionieren würde, aber leider nicht.

War es hilfreich?

Lösung

Sie sind in der Nähe, können Sie die Klasse im Namensraum deklarieren weiterleiten und es dann nach außen definieren, wenn Sie wollen:

namespace ns {
    class A; // just tell the compiler to expect a class def
}

class ns::A {
    // define here
};

Was Sie nicht können, ist die Klasse im Namensraum ohne Mitglieder definieren und dann die Klasse definiert wieder außerhalb des Namespace. Das verstößt gegen die One Definition Rule (oder Unsinn etc. zu jagen).

Andere Tipps

Sie können das tun, aber es ist nicht wirklich prägnanter.

namespace ns {
    class A;
}

class ns::A {
};

oder

namespace ns {
    class B;
}

using ns::B;
class B {
};

Der Abschnitt, den Sie lesen sollen, ist dies:

  

7.3.1.2 Namespace Mitglied Definitionen

     

3 Jeder Name zuerst in einem Namespace deklariert ist ein Mitglied dieser Namespace. [...]

Beachten Sie den Ausdruck - Erklärung so D.Shawley (und sein Beispiel) korrekt ist.

Nein kann man nicht. Um es mit dem C ++ Standard Abschnitt 3.3.5:

  

Ein Name erklärt außerhalb aller Namen oder   unnamed Namensräumen (7,3), die Blöcke   (6.3), Spaß (8.3.5), Funktion   Definitionen (8.4) und Klassen (Klausel   9) globalen Namensraum Anwendungsbereich

So die Erklärung innerhalb eines Namespace-Block sein muss -. Die Definition kann natürlich außerhalb sein

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top