#include // Template für flexiblen Array Typ template class Container { public: // T-Pointer für Inhalt des Array T* data; // int für Größe des Array int arr_size; // Methode für Umkopieren in neues Array void updateSize(int new_arr_size) { // Reservierung von Speicher mit T-Pointer für Übergangsarray mit benötigter Größe T* new_data = new T[new_arr_size]; // Füllen des Übergangsarray mit Array Inhalt for (int i = 0; i < arr_size; i++) { new_data[i] = data[i]; } // Speicherfreigabe von altem Array delete[] data; // Array Inhalt von Objekt Instanz auf T-Pointer von Übergangsarray linken data = new_data; // Aktualisieren der Array Größe der Instanz arr_size = new_arr_size; } // Konstruktor mit Anfangsarraygröße als Parameter Container(int initial_arr_size){ // Array Größe der Instanz initialisieren arr_size = initial_arr_size; // Speicherreservierung für Array Inhalt data = new T[initial_arr_size]; } // Destruktor ~Container() { // Speicherfreigabe von Array Inhalt // delete[] data; } // Überladung des [] Operators T& operator[](int index) { // Aktualisierung auf neue Größe, falls nötig if (index >= arr_size) { updateSize(index + 1); } // Eigentliche Rückgabe des Inhalt an Stelle des Index return data[index]; } // Methode zur Rückgabe der Array Größe int getArraySize() { return arr_size; } }; Container readWavFile(){ // Erstellen der Klasseninstanz mit Konstruktor Container wavData(0); // Pointer auf test.wav FILE* input; // Variable zum Abspeichern von Byte Größe der wav Datei long num_bytes; // Öffnen der test.wav Datei in input mit Leserechten input = fopen("test.wav", "r"); // Wenn test.wav Datei nicht existiert Abbruch if(input == NULL) return 1; // Setzen von FILE Pointer auf Ende der Datei fseek(input, 0, SEEK_END); // Abspeichern der Byte Größe mithilfe von input Pointer Position num_bytes = ftell(input); // Rücksetzen von FILE Pointer auf Anfang der Datei fseek(input, 0, SEEK_SET); // Überladener [] Operator zur dynamischen Speicherreservierung wavData[num_bytes*sizeof(char)-1]; // Einlesen der Datei mit num_bytes * sizeof(char) und Abspeichern in wavData Array fread(wavData.data, sizeof(char), num_bytes, input); // Freigabe des FILE Pointer fclose(input); return wavData; }; int main() { std::cout << "wavData: " << readWavFile().getArraySize() << std::endl; return 0; };