CPP Pointer Templates auf Klassen

Dieses Thema im Forum "C/C++" wurde erstellt von tr0nix, 11.07.2006.

  1. tr0nix

    tr0nix der-mit-dem-tux-tanzt

    Dabei seit:
    11.07.2003
    Beiträge:
    1.585
    Zustimmungen:
    0
    Ort:
    Schweiz, Opfikon/Glattbrugg
    Hallo zusammen

    Ich habe eine OpenGL Initialisierungsklasse gebastelt. Dazu kommen jetzt noch ein paar Klassen für Primitives (z.B. Quader) welche alle aus der Klasse "glsprite" vererbt werden mit einigen Grundlegenden Methoden wie die Position des Modelles.

    Was ich nun brauche ist eine Art Pointer, welcher auf alle glsprite vererbten Klassen verweisen kann um so einzelne Methoden dieser Klassen aufzurufen wie z.B. das "sich selber zeichnen".

    Das sollte doch mit templates machbar sein oder? Eine Art Template-Pointer welcher auf einen "glcube : glsprite" oder "glpyramid : glsprite" verweisen kann um dort jeweils die Methode "drawCode()" aufzurufen.

    Hat mir jemand einen Anhaltspunkt?

    Gruss
    Joel
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. heady

    heady Routinier

    Dabei seit:
    13.12.2005
    Beiträge:
    424
    Zustimmungen:
    0
    Ort:
    im Herzen Europas
    warum benutzt du nicht einfach nur die oberklasse als typ um auf die verbten objekte zu verweisen???
     
  4. tr0nix

    tr0nix der-mit-dem-tux-tanzt

    Dabei seit:
    11.07.2003
    Beiträge:
    1.585
    Zustimmungen:
    0
    Ort:
    Schweiz, Opfikon/Glattbrugg
    Ne das geht ned. Da kann ich ja max. auf ein Objekt zeigen aber ich werde dynamisch Memory alloziieren wo sich mehrere Objekte vom selben Typ befinden die ich mittels Arrayindex zugreifen muss.

    glcube ist aus glsprite vererbt:
    Code:
    glcube *testobjekte;
    testobjekte = new glcube[100];
    glsprite *pointer;
    pointer = testobjekte;
    Jetzt wäre aber pointer[2] != testobjekte[2] da die Objekte nicht dieselbe Grösse haben!
     
  5. heady

    heady Routinier

    Dabei seit:
    13.12.2005
    Beiträge:
    424
    Zustimmungen:
    0
    Ort:
    im Herzen Europas
    ja so ein problem hatte ich auch schonmal...
    aber ich muss mir das programm raussuchen *such* *such*
    naja vl. finde ichs bald....

    btw: habs zwar nit probiert aber, das müsste ja einen speicherfehler geben oder? wenn man dann auf testobjekte zugreifen würde, da die anderen objekte größer sind...
     
  6. tr0nix

    tr0nix der-mit-dem-tux-tanzt

    Dabei seit:
    11.07.2003
    Beiträge:
    1.585
    Zustimmungen:
    0
    Ort:
    Schweiz, Opfikon/Glattbrugg
    Hi Heady

    Mh ich denke nicht unbedingt, jedenfalls nicht, wenn man nur auf das erste Objekt zugreift.

    Mal ein Speicherabbild machen (nur für die Theorie).
    glsprite ist dabei 4 Bytes gross, glcube 2 Bytes. Zusammen ist ein "richtiges" glcubes Objekt also 6 Bytes.

    Ein glcube[2] würde also folgendermassen aussehen:
    Code:
    0x00 glsprite
    0x04 glcube
    0x06 glsprite
    0x0A glcube
    Würde man nun einen glsprite Pointer machen könnte man _meines Erachtens_ (ich bin kein Profi, nur Theoretiker!) sofern man auf 0x00 zeigt mit den glsprite Methoden arbeiten. Würde man den Pointer jedoch inkrementieren käme man auf den glcube-Code bei 0x04 was in einem Chaos enden würde.

    Da ich in glsprite bisher sowieso nur x,y,z Koordinaten gespeichert habe + eine virtuelle Methode die durch die Kindsklasse implementiert werden muss (virtual void drawCode(void) = 0), würde mich dies jedoch leider auch nicht weiter bringen :o/.

    Gruss
    Joel

    P.S. wenn du den Code finden würdest wär natürlich ganz kewl ;o)
     
  7. #6 der_Kay, 19.07.2006
    Zuletzt bearbeitet: 19.07.2006
    der_Kay

    der_Kay Doppel-As

    Dabei seit:
    28.02.2006
    Beiträge:
    140
    Zustimmungen:
    0
    Hallo,

    Deine angestrebte Lösung ist hoch problematisch und endet früher oder später definitiv in einer Zugriffsverletzung. Wenn Du eine Menge Objekte unterschiedlicher Art verwalten willst, alloziiere ein Zeigerfeld und alloziiere ein Objekt in jedem Eintrag:
    Code:
    glsprite** pointers = new glsprite* [100];
    
    for (unsigned int i=0; i < sizeof (pointers)/sizeof( glsprite*); i++)
    {
        pointers[i] = new glirgendwas( );
    } 
    
    Zugriff auf i-tes Objekt mit virtueller Methode virtual void drawCode():
    Code:
        pointers[42]->drawCode( );
    
    Deutlich eleganter ist die Verwendung vorgefertigter Containerklassen (z. B. std::vector<glsprite*>) und RTTI (dynamic_cast<...>). Das bedeutet heutzutage auch keine Performanceeinbußen mehr.
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

CPP Pointer Templates auf Klassen

Die Seite wird geladen...

CPP Pointer Templates auf Klassen - Ähnliche Themen

  1. Samsung AllShare 2.1.1.0 NULL Pointer

    Samsung AllShare 2.1.1.0 NULL Pointer: Samsung AllShare versions 2.1.1.0 and below suffer from a NULL pointer vulnerability. Proof of concept utility included. Weiterlesen...
  2. Microsoft Wordpad 5.1 Null Pointer Dereference

    Microsoft Wordpad 5.1 Null Pointer Dereference: Microsoft Wordpad version 5.1 suffers from a null pointer dereference vulnerability when handling .doc files. Proof of concept included....
  3. EMC IRM License Server 4.6.1.1995 NULL Pointer

    EMC IRM License Server 4.6.1.1995 NULL Pointer: EMC IRM License Server versions 4.6.1.1995 and below suffer from multiple NULL pointer vulnerabilities. Weiterlesen...
  4. Shared Memory Nutzung mit Pointer?

    Shared Memory Nutzung mit Pointer?: Hi, ich versuche gerade zwischen zwei Programmen Datenobjekte auszutauschen. Ein Datenobjekt hat ne variable Grösse - ist aber beiden Apps...
  5. NULL-Pointer funktioniert nicht

    NULL-Pointer funktioniert nicht: hallo! ich schreib mal wieder ein (c-)programm, und bis jetzt läuft auch alles gut. doch jetzt hab ich ein 2-ebenen-char-array, genauer gesagt...