C++ "statische" klassen?

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

C++ “statische” klassen?
hi,

das problem ist nicht mehr aktuell, aber ne lösung wär doch interessant:

ich hätte gerne eine Klassendefinition, die nur in der header gültig ist, in der sie definiert wurde. das problem dabei ist, dass diese klasse ein template-argument einer basisklasse ist. also ungefähr das hier:

class ConcreteVisitor : public IVisitor<void, ConcreteVisitor::Context> {
private:
   class Context { ... };
}

eine vorwärtsdeklaration reicht g++ nicht, er will vorher ne definition sehen. wenn ich das mache, ist die klasse wiederum sichtbar. C++ kennt keine statischen klassen (statische funktionen aber schon grummel)

kommt man da wirklich nur mit einer konvention weiter?
tomaten auf den augen?


Vielleicht verstehe ich das Problem nicht richtig, aber wenn diese Klasse (ConcreteVisitor::Context) Argument für ein Template ist, brauchst du dann nicht irgendwo eine Instanz genau diese Klasse um was mit dem Template anfangen zu können? Und wenn diese Klasse so gut versteckt ist, wie erzeugst du dann diese Instanz?


guter punkt. wenn die erzeugung des ConcreteVisitor s irgendwo möglich sein soll, dann braucht genau diese stelle auch zugriff auf die Context klasse; genau das will ich vermeiden.

aber wenn ich die erzeugung in eine nach ausen sichtbare factory methode packe, die zugriff auf die Context klasse hat, dann sieht der aufrufer nur noch den ConcreteVisitor.

wenn ichs mir genau überleg … bissi paranoid … aber naja :smiley: