Named Namespace im anonymen Namespace zur Unterteilung



  • Hallo zusammen,

    ich verwende öfters im cpp anonyme namespaces. Vor allem im Zusammenhang mit globalen Konstanten. Zum Beispiel

    namespace
    {
    const string KeyEmail="Email";
    const long NoDbKey = 0L;
    }
    

    Jetzt kam mir der Gedanke im anonymen namespace nochmal einen weiteren zu setzen bzw. es zu unterteilen. Beispiel:

    namespace
    {
        namespace Key
        {
            const string Email = "Email";
        }
        namespace Db
        {
            const long NoKey = 0L
        }
    }
    

    Wäre das unsinnig bzw. unnötig oder eigentlich sogar eine gute Idee?



  • @KK27 sagte in Named Namespace im anonymen Namespace zur Unterteilung:

    globalen Konstanten.

    Hi,

    die sind ja nicht global, sondern nur in der translation-unit sichtbar. Und dann stellt sich schon die Frage, was bei dir alles in einer translation-unit drin steckt, was mehrere sub-namespaces rechtfertigt.
    Das das jetzt "unsinnig" ist will ich nicht behaupten, aber ich habe das noch nie irgendwo gesehen oder selber verwendet.



  • @Jockelx sagte in Named Namespace im anonymen Namespace zur Unterteilung:

    die sind ja nicht global, sondern nur in der translation-unit sichtbar. Und dann stellt sich schon die Frage, was bei dir alles in einer translation-unit drin steckt, was mehrere sub-namespaces rechtfertigt.

    Stimmt. Wenn ich weitere sub-namespaces brauche, dann ist es vielleicht ein Zeichen, das meine Klasse zu viel macht.
    Mit global meinte ich nur global im cpp bekannt und sichtbar. Vielleicht ist das eine falsche Formulierung.



  • Technisch gesehen: const Objekte auf Namespace-Ebene haben sowieso internal linkage, d.h. static bzw. anonymer Namespace sind da nichtmal wirklich nötig.

    Wobei anonymer Namespace mMn. trotzdem gut ist. Die Regel mit den const Objekte auf Namespace-Ebene kennt nicht jeder. Mit dem anonymer Namespace dagegen sollte jedem klar sein dass die Objekte nicht mit anderen Objekten in anderen .cpp Files kollidieren können.


Anmelden zum Antworten