vector mit pair auf NULL initialisieren?
-
class XXX{ std::vector<std::pair<CAllocation*,CAllocation*> > test; };habe folgenden Vector, welcher ein pair enthält! Beim erzeugen der Klasse welcher das Gedingens enthält will ich das ganze teil auf NULL initialiseren
dabei soll die größe des Vector von anfang an eine bst. WErt habenhab es schon so versucht
XXX::XXX() : test(6,NULL,NULL){ }wenn ich:
XXX::XXX() : test(6){ }mach, hat der vector die größe 6, aber die pair nicht null.. geht das nicht irgendwie?
-
der vector enthält doch ein pair und kein pointer darauf. wie willst du da was mit NULL initialisieren?
-
XXX::XXX() : test(6, std::pair<CAllocation*, CAllocation*>(0,0)) { }so sollte es gehn
-
thyx.. hätte ich auch selber drauf kommen könne^^
-
EDIT: Mein Fehler ! Sorry,
Simon2.
-
Simon2 schrieb:
XXX::XXX() : test(6, make_pair(0,0)) { }auch.
Hehe, ich wollte zuerst auch die make_pair-Keule schwingen. Leider ist das hier eine der wenigen Ausnahmen, wo das nicht klappt. make_pair wird hier ein pair<int,int> instanzieren, welches dann versucht wird in ein pair<X*,X*> umzuwandeln. Leider klappt die Umwandlung von int nach X* nur für die Konstante 0. Zum Zeitpunkt der Umwandlung weiss der Compiler aber längst nicht mehr, dass das Pair lediglich zwei Nullen enthält.
-
LordJaxom schrieb:
...
Hehe, ich wollte zuerst auch die make_pair-Keule schwingen. Leider ist das hier eine der wenigen Ausnahmen, wo das nicht klappt...Stimmt ! Hatte einen "Denkdreher" ... make_pair() entscheidet natürlich nur anhand der Argumenttypen und nicht anhand des gewünschten Rückgabetyps.
Sorry, Mein Fehler und Danke für die Aufklärung,
Simon2.
-
doch geht auch mit std::make_pair
: test(6, std::make_pair<int*, int*>(0,0))
-
i_like_it schrieb:
doch geht auch mit std::make_pair
: test(6, std::make_pair<int*, int*>(0,0))Vollkommen richtig. Allerdings ist so der Schreibaufwand höher (und zwar genau fünf Zeichen) als mit std::pair.
(BTW nehme ich an, dass der int-Zeiger zur Anschauung dienen sollte, denn falls nicht lässt sich ein int* nicht in ein CAllocation* umwandeln)
-
ups, mein Fehler, ja ist nur zur Anschauung gedacht, vor allem weniger zu schreiben

Asche auf mein Haupt

P.S. ob man sich die 5 Zeichen sparen will oder nicht muss man für sich selbst entscheiden

-
Einziger Sinn und Daseinsberechtigung fuer make_pair ist doch, den Schreibaufwand fuer die Templateparameter zu sparen bzw. deren Bestimmung dem Compiler zu ueberlassen. Deshalb fuehrt das Nuzten von make_pair mit templateparametern das ad absurdum.