C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Frage zu: Stl Allokatoren

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Marco
Guest





PostPosted: Tue Feb 08, 2005 6:19 pm    Post subject: Frage zu: Stl Allokatoren Reply with quote



Hi Group,
ich lese gerade im Kapitel 19.4 "Bjarne Stroustrup Die c++
Programmiersprache"...

Dort wird der Standardallokator beschrieben und es wird gezeigt wie
der std::vector diesen verwendet. Ich habe mal gerade den Teil
abgeschrieben
den ich nicht ganz versteh:

template <class T, class A=allocater class vector
{
//snip
private:
A alloc;
//snip

explicit vector(size_type n, const T& wert=T(), const A& a=A())
: alloc(a)
{
alloc.allocate(n);
}
//snip
}

Ich kann also dem Vector einen template allocater übergeben.
Dieser wird im Konstruktor übergeben und alloc zugewiesen.
Jetzt wird über alloc die Methode allocate aufgerufen...
Ok...
Mir ist jetzt gerade nicht klar, woher der compiler weiss, das
der template allocater dessen Typ er nicht kennt, die Methode
allocate()
besitzt ?!
Ich frage deshalb, weil ich gerade selber versuche innerhalb eines
templates
einen eigenen template allocater zu verwenden. Allerdings meckert der
compiler
die Betreffende Zeile ( alloc.allocate() ) bei mir mit ".allocate must
have
class/struct/union type" an. Wer hilft mir den Wald vor lauter Bäumen
zu finden ?


Gruss
Marco

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Albrecht Fritzsche
Guest





PostPosted: Tue Feb 08, 2005 7:28 pm    Post subject: Re: Frage zu: Stl Allokatoren Reply with quote



Marco wrote:
Quote:
template <class T, class A=allocater class vector
{
//snip
private:
A alloc;
//snip

explicit vector(size_type n, const T& wert=T(), const A& a=A())
: alloc(a)
{
alloc.allocate(n);
}
//snip
}

Ich kann also dem Vector einen template allocater übergeben.
Dieser wird im Konstruktor übergeben und alloc zugewiesen.
Jetzt wird über alloc die Methode allocate aufgerufen...
Ok...

Gut :-)

Quote:
Mir ist jetzt gerade nicht klar, woher der compiler weiss, das
der template allocater dessen Typ er nicht kennt, die Methode
allocate() besitzt ?!

Obiger vector ist auch ein Template - sobald dieses aber
instantiiert wurde (zB via vector<int> vec;), ist gleichzeitig
auch der zugehoerige Allocator (allocater<int>) instantiiert.

Nun kann der Compiler also prima alle verwendeten Methoden ueberpruefen.
Alle nicht verwendeten Methoden werden nicht ueberprueft. BTW, dies
wird mitunter als Compile-time Polymorphismus bezeichnet, im Gegensatz
zum Run-time Polymorphism.

Quote:
Ich frage deshalb, weil ich gerade selber versuche innerhalb eines
templates
einen eigenen template allocater zu verwenden. Allerdings meckert der
compiler
die Betreffende Zeile ( alloc.allocate() ) bei mir mit ".allocate must
have
class/struct/union type" an. Wer hilft mir den Wald vor lauter Bäumen
zu finden ?

Einfach mal das (dem obigen Bsp entsprechende) Code Schnipsel posten?

Ali

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Thomas Witt
Guest





PostPosted: Wed Feb 09, 2005 9:41 am    Post subject: Re: Frage zu: Stl Allokatoren Reply with quote



Marco wrote:
Quote:
Ich frage deshalb, weil ich gerade selber versuche innerhalb eines
templates
einen eigenen template allocater zu verwenden. Allerdings meckert der
compiler
die Betreffende Zeile ( alloc.allocate() ) bei mir mit ".allocate must
have
class/struct/union type" an. Wer hilft mir den Wald vor lauter Bäumen
zu finden ?


Gruss
Marco


im Zweifelsfall ist allocate() keine Funktion sondern ein
Funktionsobjekt. Das heißt, dass du eine Klasse für allocate baust, und
für diese Klasse den Klammer-operator () überlädst.

mfg. Thomas

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Marco
Guest





PostPosted: Wed Feb 09, 2005 8:10 pm    Post subject: Re: Frage zu: Stl Allokatoren Reply with quote

Nabend,
vielen Dank für Deine Hilfe ich habe den Wald mittlerweile wiedergefunden Smile
Ich hatte dem template vector versehentlich ein int als allocater Typ übergeben...

Gruss
Marco

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.