Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » vector

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ] [ 5 ] [ 6 ]
010
24.09.2003, 11:55 Uhr
RHBaum



Fuer das Auseinaderziehen von Templates in .h und .cpp dateien, wurde nen extra Schluesselwort eingefuehrt. (lt. C++ Programmierung / André Willms).

Der definition stellst du das Schluesselwort "export" voran ....


C++:
export template <class Typ>
class MyTemplate
{
public:
    MyTemplate();
    ~MyTemplate();
private:
    void test();
}



DIe Implementiereungen kannst dann wie gehabt in ner cpp datei vornehmen.

Das zur Theorie ...
die Praxis:
1. Der Author weisst darauf hin, das einige compiler export ned untertuetzen !
2. Trennung von Definition und Implementation ist gegen die Natur von Templates. Ist zwar fuer den Benutzer angenehmer ... verdeckt aber die Besonderheit, das ein Template wirklich nur ne Schablone ist, und erst konkret uebersetzt wird, wenn man es Typisiert, also benutzt !

Also lieber haende Weg !!!
Schreibs lieber zusammen, so wie es alle machen. Templates sollten sowieo klein und modular sein (wie jeder code eigentlich), und monolithischer code mit mehreren typisierungen, kann den code schnell aufblaehen ! Wenn dich in dem template code nimmer auskennst, solltes vielleicht dann design noch mal uberdenken :-)

Viele kleine klassen, die keine Templates sind, schreibt man eh auch zusammen mit Implementation in der h. Datei (ohne cpp Datei) ... wenn sie univerell einsetzbar sind. Das erspart dir spaeter extra ne Lib fuer einzubinden .... Hat zwar auch Nachteile (Abhaengigkeiten), aber der Vorteil ohne Lib auszukommen ueberwiegt dann doch :-) Also gewoehn dich mal dran :-)

CIao ...

Dieser Post wurde am 24.09.2003 um 11:59 Uhr von RHBaum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
24.09.2003, 13:53 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@RHBaum
Danke für diese ausführliche Erklärung

Ich will nur mal ein bisschen damit rumspielen und "zumindest bisher" nichts konkretes programmieren.
Ich muss erst mal peilen wie sowas funzt und ein bisschen mit rumspielen.
Deshalb werde ich bestimmt auch nicht mein Design überdenken
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
24.09.2003, 14:49 Uhr
RHBaum



Also:
Auch beim spielen sollte man sich schon an gewisse Standards gewoehnen ... es sei den, man will negatives demonstrieren ! Es schadet zumindest nicht !

Und das design einer Spielerei neu ueberdenken und besser implementieren ist immer ne gute Fingeruebung fuer das spaetere leben ...
Dort lernt man aber bekanntlich auch aus Fehlern, aber meist schmerzlich ...

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
24.09.2003, 15:14 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Und das design einer Spielerei neu ueberdenken und besser implementieren ist immer ne gute Fingeruebung fuer das spaetere leben ...


ich muss erst mal soweit kommen das meine spielerei funzt
wenn ich nicht vorher die lust verliere und das fertig mach poste ich mal meine lösung und dann könnt ihr über die herziehen und verbesserungsvorschläge machen
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 24.09.2003 um 15:15 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
24.09.2003, 15:59 Uhr
0xdeadbeef
Gott
(Operator)


Visual C++ kann diese export-Geschichte allerdings nicht. Was noch ginge, wäre:

C++:
//mytemplate.h

template <typename data_t> class mytemplate
{
  void do_something();
};

#include "mytemplate.tcc"  //<--- HIER!

//mytemplate.tcc
template <typename data_t> class mytemplate<data_t>::do_something()
{
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 24.09.2003 um 15:59 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
24.09.2003, 21:14 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@beefy
so in etwa wie du das geschrieben hast habe ich das bisher gemacht

bisher hab ich das in dieser art gemacht

C++:
template <class data_t> void mytemplate<data_t>::do_something()



was ist der unterschied?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
25.09.2003, 00:51 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


was ist genau der unterschied zwischen

C++:
std::vector<Typ>& operator[](int index);


wenn ich das so implementiere kann ich wenn ich direkt mittels operator zugreife schreiben und lesen

so kann ich nur lesen aber nicht setzen
ist der ausdruck so const, wenn ja warum

C++:
std::vector<Typ> operator[](int index);


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
25.09.2003, 06:54 Uhr
virtual
Sexiest Bit alive
(Operator)


Na, der erste Ausdruck gibt ne Referenz zurück, der zweite eine Kopie. Du kannst zwar auf die Kopie chreiben, nur merkt sich niemand, was das eigentlich geschrieben wurde, weil es eine Kopie ist.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
25.09.2003, 09:59 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@virtual
na klar, ich Idiot war wohl schon zu spät
danke
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
25.09.2003, 10:20 Uhr
0xdeadbeef
Gott
(Operator)


@Windalf: Es ging darum, die Deklaration und die Implementierung wg. Übersichtlichkeit in zwei Dateien zu trennen. Das kriegst du bei templates auch hin, indem du die Implementierung in den Header includest.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ] [ 5 ] [ 6 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: