Wann und Warum static?
-
Was ist genau der Nachteil?
Die Technik ist an sich nicht ungewöhnlich ...
Templateprogrammierung, Wenn man mehrere Funktionen gleichzeitig mit nur einem Typ Switchen will / muss , Policy-Klassen ...Weil ich es hier ohne templates mache, ist es böse ?
Ciao ...
-
Der Nachteil ist dass diese Funktionen nach außen sichtbar sind und den Header zu müllen. Und bei Templates hat man keine Wahl, deshalb ist das da akzeptiert.
-
Mir ist nicht ganz klar, was du mit "mehrere Funktionen gleichzeitig mit nur einem Typ Switchen will / muss" meinst. Was den anderen Kram angeht, so ist Templatemetafoo ein ganz anderer Hund; wenn du das Typsystem programmieren willst, kommst du um Typen nicht wirklich herum (und Namespace-Templates gibt's halt nicht, obwohl das vielleicht mal ne Idee wäre).
Aber es geht auch gar nicht um böse oder nicht, sondern darum, ohne Not die Beschränkungen einer Klasse in Kauf zu nehmen. Du musst den gesamten Inhalt der Klasse samt privater Funktionen (also Implementationsdetails) im Header bekannt machen, was konzeptionell unschön ist und bei jeder Änderung der Interna dazu führt, dass sämtlicher Clientcode neu übersetzt werden muss. Du kannst die Klasse nicht auf mehrere Header aufspalten. Du kriegst schlechter optimierten Maschinencode. Du hast sogar mehr Schreibaufwand. All das ist stumpf nicht notwendig.
-
@seldon
Mal abgesehen von:
Du kriegst schlechter optimierten Maschinencode
hasst du technisch natürlich recht.
Aber Hallo, wir sind beim normalen implementieren.
Wenn du konsequent weiter denkst, gilt das was Du darlegst natürlich auch fuer alle privaten nicht virtuellen methoden ohne friend access !
Wer macht private virtuelle methoden ???private deklarationen will man ja eigentlich per definition nicht weitergeben. Am liebsten soll man sie gar niemand sehen ^^
Bei variablen hat man anders keine chance (allokation) als das sie im header stehen muessen.
Aber statische private member haetten da nix zu suchen. Die kannst du auch alle mit dem selben aufwand was mir vorschlägst, durch lokale funktionen eliminieren.
Warum macht man es da denn nicht ? Weil der Header durch die lokalen variablen eh versaut ist ?Ich denk es ist einfach uebersichtlicher, und die IDE's kommen damit besser klar bei der darstellung ...
Und genau deswegen mach ich sowas auch, es ist einfach uebersichtlicher und bequemer, man kann dank tools besser navigieren, als wenn du zig private funktionen in einer cpp hasst.Woellte ich 100% information hiding, wuerd ich auch anders vorgehen. Aber das sind Arbeits/Implementationsdinge, kein öffentliches Interface ....
Ciao ...
-
RHBaum schrieb:
Wer macht private virtuelle methoden ???
Ist bloss ein sehr übliches C++Idiom
http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Non-Virtual_Interface
-
Aber statische private member haetten da nix zu suchen. Die kannst du auch alle mit dem selben aufwand was mir vorschlägst, durch lokale funktionen eliminieren.
Exakt. Warum braucht man eigentlich private statische Memberfunktionen? Also mal von template metafoo abgesehen?
-
otze schrieb:
Exakt. Warum braucht man eigentlich private statische Memberfunktionen? Also mal von template metafoo abgesehen?
malloc oder ähnliches für die freiliste, Klassenspezifische Objekt-IDs erzeugen für Verwendung im Konstruktor, Singletons.
-
das erste hab ich nicht verstanden, 2 habe ich ehrlich gesagt nie gebraucht und singleton ist bei mir in etwa bei goto angesiedelt.
-
malloc oder ähnliches für die freiliste, Klassenspezifische Objekt-IDs erzeugen für Verwendung im Konstruktor, Singletons.
Und auch das könntest Du genau so mit globalen Methoden ersetzen.
Am Ende isses ein Gestaltungsmittel ...
und singleton ist bei mir in etwa bei goto angesiedelt.
Manche sehen Singletons als total sexy an ...
Manche sehen Singletons nur als aufwendiger formulierte Form einer globalen Variable (absolut unattraktiv) ...Wenn Du das Design 100% selbst in der Hand hasst, brauchst du dann globale Variablen ?
Was ist nun gut, was ist nun schlecht ? Und wer bestimmt das ?
Ciao ....
-
cooky451 schrieb:
@Skym0sh0 Anfangsfrage:
Wenn etwas zur Klasse gehört aber nicht zu einem bestimmten Objekt, dann macht man es statisch. Eigentlich relativ offensichtlich. Oft braucht man das natürlich nicht, und wenn das so ist ist das eher ein gutes als ein schlechtes Zeichen. Ich habe allerdings z.B. öfter mal private statische Hilfsmethoden, weil man sowas bei Templates nicht in der Implementierungsdatei in einem anonymen namespace verstecken kann. Ein weiteres Beispiel für statische Methoden sind Singletons. (Welche übrigens generell als Antipattern gesehen werden, was ich auch verstehen kann, aber für Startup-Kram sind sie dennoch nützlich. z.B. für WSAStartup() bei Sockets.)RHBaum schrieb:
Manche sehen Singletons als total sexy an ...
Manche sehen Singletons nur als aufwendiger formulierte Form einer globalen Variable (absolut unattraktiv) ...Und beide liegen falsch.
RHBaum schrieb:
Was ist nun gut, was ist nun schlecht ?
Schlecht sind z.B. statische Memberfunktionen die nicht unmittelbar zur Klasse gehören und die man auch in eine .cpp Datei schieben könnte. Oder Singletons die globale Variablen modellieren. Oder Leerzeichen vor Satzzeichen.
Und wer bestimmt das ?
Ich.

-
cooky451 schrieb:
Und wer bestimmt das ?
Ich.

Ich nicht?
*okayface.png*