Zugriffsmodifier gesucht



  • Hallo!

    Gibt es in C++ Zugriffsmodifier für "Nur im eigenen Namespace" und "Nur im eigenen Projekt" (bei Bibliotheken)?
    Ich habe in solchen Fällen, soweit ich mich erinnere, einmal friend-Functions verwendet, aber da muss es doch eine bessere Lösung geben.

    Danke schonmal!

    mfg



  • Hi,

    könntest du die frage bitte umformuliern ? Ich versteh nicht was du meinst. Was genau meinst du mit zugriffmodifier ?



  • nein in c++ gibts nur die zugriffsmodifizierer public, protected und private
    was hast du denn vor?



  • Ich schreibe eine Bibliothek die dann in anderen Anwendungen benutzt werden kann. Diese Bibliothek besteht aus mehreren Klassen, wobei sich diese Klassen aber auch gegenseitig verwenden.

    Nun müssen diese Klassen in einigen wenigen Fällen Daten austauschen, die sie intern in privaten Variablen speichern. Für den Anwender der Bibliothek spielt das aber keine Rolle, den der könnte mit diesen Daten sowieso nichts anfangen. Daher wollte ich Funktionen schreiben, über die diese Daten ausgetauscht werden können. Um den Anwender aber nicht unnötig zu verwirren sollen sie nur im eigenen Namespace, also nur für die Klassen meiner Bibliothek, zur Verfügung stehen.



  • Hi,

    wie wärs denn mit sowas:

    namespace lib_global{
    
          class A{};
          class B{};
          class C{};
    
          namespace lib_swap{
                  void some_func_to_swap_data_between_my_classes();
          }
    
    }
    

    Der anwender benutzt nur lib_global als namespace und bekommt von den internen geschichten nichts mit. Das ist zwar kein schutz aber könnte sowas sein was du möchtest.


  • Mod

    du könntest einen privaten (undokumentierten) namensraum für diese funktionen verwenden und dann immer qualifizierte aufrufe durchführen (beziehungsweise die funktionen durch using in deinem code sichtbar machen).



  • Man könnte die Deklaration auch in einen unbenannten Namensraum packen, dann kann nur aus der Kompilierungseinheit darauf zugegriffen werden.

    // lib.hpp
    namespace
    {
        int mach_ouas ();
    }
    
    namespace lib
    {
        class A
        {
        public:
            int methode ()
            {
                return mach_ouas ();
            }
        };
    }
    

Anmelden zum Antworten