 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Marco Guest
|
Posted: Tue Feb 08, 2005 6:19 pm Post subject: Frage zu: Stl Allokatoren |
|
|
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
|
Posted: Tue Feb 08, 2005 7:28 pm Post subject: Re: Frage zu: Stl Allokatoren |
|
|
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
|
Posted: Wed Feb 09, 2005 9:41 am Post subject: Re: Frage zu: Stl Allokatoren |
|
|
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
|
Posted: Wed Feb 09, 2005 8:10 pm Post subject: Re: Frage zu: Stl Allokatoren |
|
|
Nabend,
vielen Dank für Deine Hilfe ich habe den Wald mittlerweile wiedergefunden
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 |
|
 |
|
|
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
|
|