Klasse verstecken
-
Hi:
#ifndef TEST_HPP #define TEST_HPP #include <map> namespace aaa { struct A // soll nicht nach außen sichtbar sein { int i; bool operator < (const A& a); }; class B // soll nach außen sichtbar sein { std::map<A, bool> m_map; // braucht A :( public: int foo(); }; } #endifDer Code sagt eigentlich alles. Nur in der .cpp Datei in der A definiert wird, soll ein Objekt der Klasse A erstellt werden können. Soll heißen, alles was einfach nur diese Datei "includet" soll A am besten gar nicht sehen und falls doch, wenigstens kein Objekt von A erstellen können. Ist das möglich?
Edit:
Ich fürchte es ist nicht möglich, wäre irgendwie unlogisch, es sei denn ich habe gerade ein riesen Brett vorm Kopf. Trotzdem erscheint mir das wie ein alltägliches Problem, wie löst ihr solche Abhängigkeiten?
-
Mach A doch einfach zu einer privaten nested class von B.
-
Du könntest A in eine class legen und nur den Klassen/Funktionen im Header mit Friend Zugriff gewähren. Sonst fällt mir da nichts ein.
-
Wie schon gesagt wurde:
class B // soll nach außen sichtbar sein { struct A // soll nicht nach außen sichtbar sein { int i; bool operator < (const A& a); }; std::map<A, bool> m_map; // braucht A :( public: int foo(); };
-
Ja das Beispiel war doof, es brauchen mehrere Klassen zugriff auf A. Die Sache mit friend guck ich mir mal an, ob es der Aufwand wirklich wert ist.
-
Man löst das üblicherweise einfach so, dass man "A" in einen "Detail" Namespace legt.
Das verhindert zwar nix, dokumentiert allerdings dass "A" nicht für die externe Verwendung gedacht ist.
-
cooky451 schrieb:
Ja das Beispiel war doof, es brauchen mehrere Klassen zugriff auf A. Die Sache mit friend guck ich mir mal an, ob es der Aufwand wirklich wert ist.
Was sind denn A und B genau? Warum brauchen mehrere drauf Zugriff? Und warum soll A versteckt werden?
-
Vielleicht noch das pimpl-Idiom?