000
28.02.2005, 19:14 Uhr
~sqrt(-1)
Gast
|
Was ich brauche, ist eine Template-Funktion die einen Zeiger annimmt. Die verschiedenen Typen sind auf die der Zeiger zeigt sind z.B.:
float[3] short byte[4] ...
Für den ersten Typ, währe also ein Element von der Größe 3*sizeof(float).
(Die Template-Funktion muss dann noch die Byte-Offsegröße zwischen den einzelnen Elementen und die Anzahl an Elementen als Parameter annehmen. Dann ließt die Funktion alle Elemente entsprechend des Byte-Offsets und der Anzahl in einen Puffer und speichert diese in eine Datei.)
Mein Problem ist es nun möglichst elegant die entsprechenden Zeiger zu kreieren und eine Template Funktion zu schreiben, die mit den verschiedenen Typen umgehen kann. Damit die Template-Funktion möglichst schlank wird, möchte ich gleich mit ganzen Elementen hantieren und nicht mit einzelnen primitiven Datenelementen eines Elements.
Wenn die Struktur, worauf der Zeiger zeigt, nur einen primitiven Datentyp behinhaltet, gibt es kein Problem. Wenn die Struktur ein Array enthält, stürzt das Programm mit dem Funktionsaufruf ab und führt nicht einmal eine Anweisung innerhalb der Template-Funktion aus.
C++: |
struct _AElement { short Element; }*APointer;
struct _BElement { float Element[3]; }*BPointer;
APointer = (_AElement*)VoidPointer; LogArray(APointer, 45, 102); // Alles Okay!
BPointer = (_BElement*)VoidPointer; LogArray(BPointer, 55, 400); // Absturz!
template <class ElementType> DWORD LogArray(ElementType* ArrayPointer, int ArrayStride, int ArraySize) { ... }
|
Wo liegt das Problem und was ist eine lauffähige Alternative?
Vielen Dank für Eure Hilfe! |