Triviale Getter- / Setter in Klassendeklaration definieren?
-
Meine Frage, sollte man triviale Getter- / Setter-Methoden in der Klassendeklaration definieren, oder sie nur deklarieren und genau so wie die "großen" Methoden außerhalb definieren?
Es ist ein deutlicher Mehraufwand, bei vielen Getter- / Setter-Methoden, die Deklaration sieht aber auch deutlich aufgeräumter aus. Die Methoden zu inlinen würde das "Erscheinungsbild" der Deklaration ein wenig verschlechtern, allerdings spart man sich dafür wie gesagt viel Zusatzarbeit.
BITTE MARKIEREN, WIE IHR ES HANDHABT:
[ ]
// Foo.h class Foo { public: void setA(int a); void setB(int b); void setC(int c); void setD(int d); // ... }; // Foo.cpp void Foo::setA(int a) { m_a = a; } // ...[ ]
// Foo.h class Foo { public: void setA(int a) { m_a = a; } void setB(int b) { m_b = b; } // ... };Ich für meinen Teil tendiere klar zu letzterem, weil das Kosten/Nutzen Verhältnis für mich besser ist.
-
Hallo
Wenn nicht mehr passiert als die Zuweisung verwende ich immer die Inlinevariante.
chrische
-
Inline-Variante!
Sieht ja nichtmal so unübersichtlich aus.Gruß
tHOMY
-
die inlinevariante nur dann, wenn ich wirklich 200%ig sicher bin, dass da im späteren Verlauf nicht noch irgendwelche Überprüfungen etc. einzubauen sind. Grund: wenn ich später eine .cpp ändern muss, muss ich die neu kompilieren und dann neu linken. Wenn ich die .h ändern muss, muss ich alles neu kompilieren was die .h einbindet. Also lieber sparsam mit den inlines.
(Und wer jetzt mit Performance-argumenten kommt: die meiste Zeit ist mir Performance erstmal schnuppe. Erst wenn der Profiler mir sagt dass es irgendwo hängt kümmer ich mich drum. Und es hängt eher selten an dem einen zusätzlichen Funktionsaufruf. Keine verfrühte Optimierungen!)
-
Abgesehen davon ist es auch möglich, die Definition ausserhalb der Klasse zu schreiben und das Schlüsselwort
inlinedavor zu stellen.