frage zu void * und mehrdimensionalen arrays



  • hi ihr,
    erstmal zu dem void kram.:
    in einer klasse habe ich folgendes member:

    void * m_pvMember;

    (sooll mal ein array werden)
    sinn und zweck ist natürlich, dieses array mit beliebigen datentypen zu füllen (es geht hierbei um custom vertices). in der fill methode der klasse, an die ein void * (array einer beliebigen klasse) übergeben werden soll, und die diesen dann dem oben genannten member zuweist.
    nun möchte ich eine zugriffsmethode für dieses array in die klasse einbauen, diese soll jedoch n icht das ganze array (den void 😉 zurück liefern, sondern nur einen bestimmten eintrag in diesem(welcher das ist, wird durch einen parameter an diese methode weiter gegeben) ich habe nun schon folgenmdes probiert, es klappt jedoch wie erwartet nicht:

    return m_pvMember[index];

    nun meine frage, wie kann ich auf einzelne einträge in diesem array zugreifen?

    nun zur zweiten frage:
    wie kann ich in einer funktion ein mehrdimensionales array zurück liefern, bzw. wie muss der rückgabe wert aussehen, bei z.b. unsigned long * bekomme ich eine fehlermeldung, unsigned long ** funzt auch nicht. meine lösung sieht nun folgendermaßen aus:
    unsigned long * Class::GetValue()
    {
    return (unsigned long 😉 m_aulMehrdimensionalesArray;
    }

    wobei m_aulMehrdimensionalesArray so deklariert ist:
    unsigned long m_aulMehrdimensionalesArray[5][5];

    frage: könnte das so funzen, und wenn nciht, wie dann?

    danke erstmal an alle, die bis hier hin gelesen haben, hoffe, mir kann geholfen werden, danke



  • Also, der Grund warum du bei void*-Arrays nicht auf einzelne Elemente zugreifen kannst ist der einfache, dass void kein bestimmter Typ ist. Aber in diesem Fall kann man casten wenn man den Typ kennt. Vom Style her ist das nicht so die Welt würde ich sagen. Was spricht gegen eine eigene Klasse die mehrdimensionale Arrays verwalten kann? Wenn du googlest oder die Suchfunktion benutzt wirst du wahrscheinlich eine fertige finden, z.B.: http://www.c-plusplus.net/forum/viewtopic.php?t=36382



  • Zu dem void kram: Das ist ja das schlimme, der typ ist unbekannt, der user der engine (das ding, wofür ich das alles brauche) kann ja jeden beliebigen vertex type ertsellen (die klasse, wofür ich das brauche ist ein vertex buffer).
    zu den arrays:
    nun ja, der link ist nicht gerade da, was ich suche, ich will das auch nicht mit vector oder so machen, es sollten schon arrays sein, trotzdem danke.



  • Wenn der Typ unbekannt ist dann ist das doch ne schöne Möglichkeit ein Template zu verwenden. Dann kannst du aber nicht verschiedene Typen in eine Instanz packen. Dafür müsste man ne andere Lösung finden.

    template<typename T>
     class Test {
       T array[20][20];
    }
    

Anmelden zum Antworten