Header einer Klasse aufteilen
-
Hallo,
angenommen ich habe eine Klasse deren Interface mir zu gross wird, so dass ich es in zwei Interfaces aufteilen moechte: Eines fuer den Endnutzer, eines fuer Implementationsdetails.
Hier als Beispiel nur mit 2 Methoden:
class C { public: void f(); // fuer Endnutzer private: void g(); // Implementationsdetail };Wie macht man so etwas am besten?
-
Pimpl:
class C { public: void f(); // fuer Endnutzer private: struct Impl; Impl* pimpl; }; // in der .cpp: struct C::Impl { void g(); };
-
Nebenbei solltest du dir noch überlegen ob es wirklich ein sinnvolles Design ist wenn die Klasse so riesig ist. Eventuell lassen sich Teile der Funktionalität in andere Klassen auslagern.
-
ingobulla schrieb:
angenommen ich habe eine Klasse deren Interface
Mit "Interface" meinst Du wohl die Definition Klasse.
ingobulla schrieb:
mir zu gross wird, so dass ich es in zwei Interfaces aufteilen moechte: Eines fuer den Endnutzer, eines fuer Implementationsdetails.
[...]
Wie macht man so etwas am besten?Gar nicht. Selbst wenn Du die Definition einer Klasse auf zwei Header-Dateien verteilst, zB
class big_ugly_monster_class { private: #include "big_monsters_private_parts.inc" public: ... };wird das nicht wirklich übersichtlicher. Code, welcher die Klasse benutzen will, muss immer noch die komplette Klassendefinition gesehen haben. Da musst Du wohl in den sauren Apfel beißen und ein neues Design anfangen. Achte dabei auf SoC.