template-frage
-
hi leute, wenn ich eine template klasse mache, in einier extra headerdatei die methoden deklariere, aber in einer extra definiere, wie muss die definition aussehen?
[cpp]
test.htemplate<class T>class test
{
string text;
public:
string GetText()const;
};test.cpp
//wie muss hier die definition der funktion aussehn??
[/cpp]
-
template <class T> string test<T>::GetText() const { return text; }
-
Citrell schrieb:
hi leute, wenn ich eine template klasse mache, in einier extra headerdatei die methoden deklariere, aber in einer extra definiere, wie muss die definition aussehen?
[cpp]
test.htemplate<class T>class test
{
string text;
public:
string GetText()const;
};test.cpp
//wie muss hier die definition der funktion aussehn??
[/cpp]das geht in der test.cpp nicht. der compiler, der gerade die main.cpp compiliert und ein template aus der test.h benutzen soll, muß es vollständig gesegen haben, damit er es generieren kann, sobald es gebraucht wird.
ok, ist nur die halbe wahrheit, aber sollte erstmnal reichen.
bist du den komischen leuten verfallen, die aus prinzip trennen wollen, dann
template<class T>class test { string text; public: string GetText()const; }; //es folgt die implementierung template<class T> string test<T>::GetText() const{ return text; }
-
volkard schrieb:
bist du den komischen leuten verfallen, die aus prinzip trennen wollen, dann...
was spricht dagegen, zu trennen?
-
Es ist bei templates oft unübersichtlich, und in den Header muss sowieso beides.
-
Lars Hupel schrieb:
volkard schrieb:
bist du den komischen leuten verfallen, die aus prinzip trennen wollen, dann...
was spricht dagegen, zu trennen?
volkard und schreibaufwand
-
miller_m schrieb:
Lars Hupel schrieb:
volkard schrieb:
bist du den komischen leuten verfallen, die aus prinzip trennen wollen, dann...
was spricht dagegen, zu trennen?
volkard und schreibaufwand
haha...
also für mich spricht dafür, dass es übersichtlicher ist!
-
Lars Hupel schrieb:
haha...
also für mich spricht dafür, dass es übersichtlicher ist!vermutlich, weil du 20-zeilige mega-funktionen baust. die müssen natürlich raus, wenn möglich. aber sowas macht man ja nicht.
-
also habe ich da rausgehört, das man wohl die definition gleich mit in der klasse machen sollte?
-
Citrell schrieb:
also habe ich da rausgehört, das man wohl die definition gleich mit in der klasse machen sollte?
bei templates ja.
-
Citrell schrieb:
also habe ich da rausgehört, das man wohl die definition gleich mit in der klasse machen sollte?
und bei funktionen, deren code kürzer und einfacher zu lesen ist als jeder kommentar, der die funktion beschreiben würde.
string GetText()const{ return text; }
-
...es sei denn, man hat 20-zeilige Mega-Funktionen. Aber sowas macht man nicht, wie Volkard schon sagte.
-
otze schrieb:
Citrell schrieb:
also habe ich da rausgehört, das man wohl die definition gleich mit in der klasse machen sollte?
bei templates ja.
Ist ja nur die halbe Wahrheit! Bei Templates, weil es die Compiler nicht besser können, obwohl laut ISO-Standard es möglich sein sollte.
-
Lars Hupel schrieb:
volkard schrieb:
bist du den komischen leuten verfallen, die aus prinzip trennen wollen, dann...
was spricht dagegen, zu trennen?
wer etwas aus prinzip macht, ist für mich komisch.
für's trennen kann es durchaus gründe geben. und zwar die größere compiliergeschwindigkeit, wenn man es trickreich und konsequent durchhalten kann. für normalsterbliche ist kein vorteil zu erwarten.
-
volkard schrieb:
Lars Hupel schrieb:
haha...
also für mich spricht dafür, dass es übersichtlicher ist!vermutlich, weil du 20-zeilige mega-funktionen baust. die müssen natürlich raus, wenn möglich. aber sowas macht man ja nicht.
na, also ganz blöd bin ich ja nun auch nicht
aber ich werde mir eure hinweise merken und in zukunft funktionen in template-klassen nur noch inline definieren...