PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++: Arraygröße bei Übergabe mitbestimmen


pajofego
2008-03-10, 20:28:54
Hallo zusammen,

um die Arraygröße zu bestimmen ohne diesen separat mitzugeben benutze ich folgenden Hilfstemplate.


template <typename T, size_t N> size_t countof( T (&array)[N] )
{
return N;
};


So jetzt möchte ich ein Array durch die Funktion SetLength auf eine neue Größe erweitern. Die geht soweit ganz gut mit folgendem Code.


void SetLength(T *&Array, int NewSize)
{
// int dim = countof(Array);
int dim = 1;
T temp[NewSize];
for(int i=0; i<dim; i++)
temp[i] = Array[i];
delete[] Array;
Array = temp;
};


Der Aufruf erfolgt über:


double *test = new double[1];
SetLength(test,2);


Jetzt würde ich ganz gerne in SetLength die Dimension des übergebenen Arrays über countof bestimmen. Wenn ich die Zeile auskommentiere mekkert der Compiler und ich bin mit meinem Zeigerwissen am Ende :frown: Könntet ihr mit da bitte weiterhelfen? Geht das in der Form überhaupt, d.h. die Bestimmung der Arraygröße ohne diesen seperat mitzugeben?

Danke und viele Grüße
pajofego

P.S.: error: no matching function for call to `countof(double*&)'

Gast
2008-03-10, 20:37:17
nimm doch std::vector

pajofego
2008-03-10, 20:48:02
nimm doch std::vector

Die Antwort hatte ich befürchtet! :biggrin: Ich gebe dir recht, könnte/sollte ich machen. Nun sitze ich seit ein paar Stunden vor diesem Problem und möchte das jetzt irgendwie gelöst sehen und verstehen.

Danke,
Gruß
pajofego

Trap
2008-03-10, 21:05:45
Das countof Template funktioniert nur wenn das Array auch als Array typisiert ist.

SetLength muss auch eine Template-Funktion sein und man darf das Array nicht erst einem pointer zuweisen, dann geht es eventuell. Achso, mit new[] und delete[] zusammen wird es nicht gehen, das erzeugt nämlich Pointer und keine Arrays.