Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

grek40

Alter Hase

  • »grek40« ist der Autor dieses Themas

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

1

28.04.2006, 20:28

2 Parameter im []-operator?

Wie der Titel bereits andeutet möchte ich für die Templateklasse, in der ich 2D-Arrays verwalte den []-operator mit 2 Parametern überladen. Da ich bis jetzt nicht rausgefunden hab, wie das geht hab ich temporär stattdessen den ()-operator im Einsatz:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
template <class T>
class Array
{
// ...

// ()-operator funktioniert

T& operator () (int i, int j = 0)
    {
    if (i<_size && j<_size2)// Fehler

        return _array[i*_size2 + j];
    else
        return _array[0];
    }

// geht so nicht, hab auch schon [,] versucht - ebenfalls Fehler

T& operator [] (int i, int j = 0)
    {
    if (i<_size && j<_size2)// Fehler

        return _array[i*_size2 + j];
    else
        return _array[0];
    }
}

Wär toll, wenn jemand einen Tipp hat, wie sich das mit einem []-operator lösen lässt.

Anonymous

unregistriert

2

28.04.2006, 20:33

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    // 2D array

template<typename T> class array2d 
{ 
public: 
    array2d (unsigned long rows, unsigned long cols) : rows_(rows), cols_(cols), data_(new T[rows*cols])
    {} 

    ~array2d (void) 
    { delete [] data_; } 

    inline T* operator[] (unsigned long line) 
    { return (&data_[line * cols_]); } 

private:
    T*            data_; 
    unsigned long rows_; // Zeilen

    unsigned long cols_; // Spalten

};
Benutz es, es ist guuuuuuut

grek40

Alter Hase

  • »grek40« ist der Autor dieses Themas

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

3

28.04.2006, 20:40

Sieht gut aus.

Wenn ich richtig sehe nutzt man das wie ein normales 2D-Array, indem man die Spalten in einer 2. Klammer dereferenziert (nur die hässliche Verwendung von typename** entfällt). Ich werd das mal übernehmen und für mich anpassen.

Danke :huhu:

Anonymous

unregistriert

4

28.04.2006, 20:44

grek40
Was gibt es denn da noch anzupassen? :help:

grek40

Alter Hase

  • »grek40« ist der Autor dieses Themas

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

5

28.04.2006, 20:48

Ich bau noch Delete ein, um nicht zwangsläufig auf den Destruktor warten zu müssen, mach noch Resize und Copyconstruktor,... und benenne das ganze bisschen um, um in den Projekten wo ich damit arbeite nicht alles ändern zu müssen.

Hat sicher auch Vorteile, dass deine Klasse schön klein gehalten ist aber im Moment will ich Komfort :)

Werbeanzeige