get_class bzw. get_object_vars Alternative in C++



  • Hallo.

    Gibt es in c++ eine Alternative zu den PHP-Befehlen get_class bzw
    get_object_vars?

    get_class würde mir den Klassennamen zurückgeben, in dem die Methode sich befindet, in der die Funktion aufgerufen wird.

    get_object_vars würde mir ein Array mit allen Eigenschaften der Klasse zurückgeben.

    Wie kann ich das realisieren?

    Danke im Voraus!!



  • In eigenen Objekten:

    Eine Methode einbauen die diese Information liefert

    In fremden Objekten:

    garnicht.

    Sehe auch in C++ kein sinn bzw. bedarf daran



  • Knuddlbaer schrieb:

    In eigenen Objekten:

    Eine Methode einbauen die diese Information liefert

    In fremden Objekten:

    garnicht.

    Sehe auch in C++ kein sinn bzw. bedarf daran

    Naja bei fremden Klassen könnte man von dieser eine Klasse ableiten, welche dann
    eine Methode dafür bereitstellt.

    Vergiss es in C++ so zu programmieren wie in PHP.



  • jedenfalls den namen kann man erhalten mit typeid. oder jedenfalls einen namen. wobei sowas aber kaum jemals wirklich nötig oder sinnvoll ist.



  • SirLant schrieb:

    Naja bei fremden Klassen könnte man von dieser eine Klasse ableiten, welche dann eine Methode dafür bereitstellt.

    Das geht in C++ aber nicht. Mal abgesehen davon das man i.d.r. wissen sollte von was man erbt man IMHO die Klasse nicht befragen muss "Wer bist Du was hast Du ?" würde dies wärend der Laufzeit erfolgen. Zu dem Zeitpunkt kann man nichts mehr erben. Kann mir nicht vorstellen das man das für Vererben braucht. (Ok in C++ seh ich wirklich keinen Sinn, aber für was brauch man das in php ?)

    jedenfalls den namen kann man erhalten mit typeid. oder jedenfalls einen namen. wobei sowas aber kaum jemals wirklich nötig oder sinnvoll ist.

    Die Ausgaben von typeid ist aber nicht garantiert und kann variieren.



  • get_object_vars eventuell für Debugging-Zwecke. 😕



  • Sehe auch in C++ kein sinn bzw. bedarf daran

    Ich schon.

    Reflektion gibt's in C++ trotzdem nicht.



  • Helium schrieb:

    Sehe auch in C++ kein sinn bzw. bedarf daran

    Ich schon.

    Jo, ne schoene Reflektion API waere genial. Waere aber nicht vernuenftig implementierbar.
    Deshalb waere ich ja fuer eine statische Reflektion bei Templates, da ja alle Informationen zur Compiletime bekannt sind. Wird es aber trotzdem vermutlich nie geben 😞



  • Knuddlbaer schrieb:

    SirLant schrieb:

    Naja bei fremden Klassen könnte man von dieser eine Klasse ableiten, welche dann eine Methode dafür bereitstellt.

    Das geht in C++ aber nicht. Mal abgesehen davon das man i.d.r. wissen sollte von was man erbt man IMHO die Klasse nicht befragen muss "Wer bist Du was hast Du ?" würde dies wärend der Laufzeit erfolgen. Zu dem Zeitpunkt kann man nichts mehr erben. Kann mir nicht vorstellen das man das für Vererben braucht. (Ok in C++ seh ich wirklich keinen Sinn, aber für was brauch man das in php ?)

    Warum sollte das nicht gehen? Was hindert mich daran, von einer Klasse, deren
    Deklaration (Header) ich habe eine andere abzuleiten? Ich weiß ja wie die Basisklasse
    heißt und kann daher ohne Mühe ne Methode schreiben die diese Infos auf Anfrage
    azusgibt.



  • SirLant: das schaut theoretisch vielleicht OK aus - praktisch funktioniert es aber nicht, weil du eben nicht selber _alle_ Objekte erstellst. Somit hast du teilweise Objekte mit Reflektion und teilweise ohne. Und dann wirds wirklich hässlich.



  • Jo, ne schoene Reflektion API waere genial. Waere aber nicht vernuenftig implementierbar.

    Weil? Was heißt hier vernüpftig?

    Deshalb waere ich ja fuer eine statische Reflektion bei Templates, da ja alle Informationen zur Compiletime bekannt sind. Wird es aber trotzdem vermutlich nie geben

    Da stellen sich mir natürlich eine Reihe von Fragen: Wie sieht deine Vorstellung davon aus? Könnte man mehr, als mit Stoustups Concepts? Wenn ja, was?



  • Ach ja n1522 und n1536 natürlich auch noch lesen.

    /edit: UBB-Code korrigiert


Anmelden zum Antworten