Kann man Doxygen beibringen dass er Klassen im Klassendiagramm "auslassen" soll?
-
Ich habe in einem Projekt ein Template, welches ca. folgendermassen aussieht und verwendet wird:
template <class DERIVED, class BASE> class ControlBase : public BASE { public: shared_ptr<DERIVED> shared_from_this(); // ... }; // --- class Button : public ControlBase<Button, Control> { // ... };
Kann man Doxygen irgendwie beibringen die Klasse ControlBase in den Klassendiagrammen (Vererbungshierarchie) auszulassen?
Im Moment habe ich Doxygen so eingestellt, dass er sämtliche Klassen erfasst, nicht nur dokumentierte. Das würde ich auch gern beibehalten, da ich Doxygen hauptsächlich verwende um eine Übersicht über das Projekt zu haben -- und dafür will ich nicht erstmal alle Klassen dokumentieren müssen.
----
Ich hab' mir auch schon überlegt das Ableiten von ControlBase über ein Makro zu machen. Das Makro könnte man kann einfach für Doxygen anders definieren, so dass es direkt von BASE ableitet statt von ControlBase<..., BASE>. Allerdings wäre das weniger schön, da es Intellisense und Visual Assist X unnötig verwirrt. Und natürlich wird es lästig sobald BASE oder DERIVED selbst Templates sind die mehr als ein Template-Parameter haben (der Präprozessor checkt ja nicht dass das "," hier kein "Präprozessor-Makro-Parameter-Trennkomma" ist, und man müsste BOOST_PP_COMMA() oder ähnliche hässliche Tricks verwenden um ihm das Komma doch noch unterzujubeln).
Ist also auch irgendwie doof.
-
Ich denke nicht, dass das "nativ" geht, eine Zwischenklasse auszulassen ist ja schon ein ziemlich spezifisches Feature. Und wenn man bedenkt, dass man nicht einmal private Vererbung oder Typedef-Typen verstecken kann, wird das wohl kaum implementiert sein. Im Bezug auf Data Hiding hat Doxygen noch einen weiten Weg vor sich.
Ich hätte es jetzt persönlich auch mit einem Makro gelöst, ich sehe gerade keine bessere Möglichkeit. Zur Not machst du dir halt mehrere Makros mit unterschiedlicher Parameterzahl.
Oder du änderst den Doxygen-Code entsprechend
Hab ich beim Typedef gemacht und dem Entwickler geschickt. Aber der Code ist ziemlich unübersichtlich und schlecht dokumentiert, es war ein ziemlich langes Ausprobieren...