1. #1

    Registriert seit
    19.11.2011
    Beiträge
    496
    Thanked 412 Times in 268 Posts

    Standard [][] - Operator anbieten

    Hallo,

    in einer Klasse für Matrizen möchte ich, dass auf die einzelnen Elemente wie bei einem zweidimensionalen Array zugegriffen werden. C++ kennt den Operator "[][]" ansich ja nicht, deswegen kann man ihn nicht überladen. Ich habe mir zwei Workarounds gebastelt, die ich unschön finde:

    1.:
    Code:
    class Matrix {
    public:
        Matrix() {}
        float* operator[] (const int iRow) {
            assert(iRow >= 0 && iRow < ROWS);
            switch(iRow) {
            case 0:
                return &m_aElements1[0];
            case 1:
                return &m_aElements2[0];
            case 2:
                return &m_aElements3[0];
            case 3:
                return &m_aElements4[0];
            }
        }
    private:
        static const int ROWS = 4;
        static const int COLS = 4;
        float m_aElements1[COLS];
        float m_aElements2[COLS];
        float m_aElements3[COLS];
        float m_aElements4[COLS];
    };
    
    int main(int argc, char **argv) {
        Matrix m;
        m[0][1] = 4;
        std::cout << m[0][1];
    }
    Hier scheint zwar das Ziel erreicht, aber da ein Zeiger zurückgegeben wird, habe ich vollen Kontrollverlust.

    Und die zweite Möglichkeit:
    Code:
    class Matrix {
    public:
        Matrix() {}
        float& operator() (const int iRow, const int iCol) {
            assert(iRow >= 0 && iRow < ROWS);
            assert(iCol >= 0 && iCol < COLS);
            return m_aElements[iRow][iCol];
        }
    private:
        static const int ROWS = 4;
        static const int COLS = 4;
        float m_aElements[ROWS][COLS];
    };
    
    int main(int argc, char **argv) {
        Matrix m;
        m(0, 1) = 4;
        std::cout << m(0, 1);
    }
    Hier kann ich zwar beide Indizes überprüfen, aber der Aufruf ähnelt - logischerweise - sehr einem Funktionsaufruf.

    Kennt ihr andere Möglichkeiten? Außer die Sichtbarkeit des Arrays zu ändern...
    Geändert von Mr. White (30.09.2012 um 17:58 Uhr)

Ähnliche Themen

  1. Bots für Spiele anbieten illegal?
    Von PartyFreak im Forum Recht- und Verbraucherschutz
    Antworten: 7
    Letzter Beitrag: 24.04.2014, 10:53
  2. Freundin die Verlobung anbieten !
    Von sL1tchK0ss im Forum RealLife
    Antworten: 11
    Letzter Beitrag: 25.01.2013, 15:26
  3. Shell wird kostenloses WLAN in Tankstellen anbieten
    Von Mickeyy im Forum IT & Technik News
    Antworten: 2
    Letzter Beitrag: 07.02.2012, 18:08
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.