JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

__FILE__ __LINE__ Makros

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 17.01.2005, 14:32    Titel: __FILE__ __LINE__ Makros Antworten mit Zitat

fürs Errorhandling möchte ich gerne eine einfache Funktion schreiben, die den Namen einer Variablen, ihre Positon und ihren Wert ausgibt. In etwa soll das dann so aussehen:
int X=10;
ErrorLog(X);

ErrorLog soll dann in die Datei schreiben:
Var (int X)=10 @ Line 2 in File "test.cpp"

Gibt zwar die __LINE__ und __FILE__ Makros (ode was das sonst ist), ber wenn ich die in den ErrorLog Quelltext schreibe, ist Zeile und Datei ja immer identisch. Wert ist ja klar, wie man den Typ eines Templates bestimmen kann hat mir Patrick mal gesagt, aber wie ich den Variablenname und die Positon des ErrorLog aufrufes herausfinden kann leider nicht.

Gibt es überhaupt eine Möglichkeit, eine solche Funktion zu schreiben? Würde das proggen ja sehr konfortabel machen.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 17.01.2005, 15:34    Titel: Antworten mit Zitat

Jonathan_Klein
Eine Funktion kannste damit nicht machen, das geht nur über den Präprozessor (LEIDER!)

Hier sind Deine beiden Fragen beantwortet:
1. Typidentifizierung
2. Name einer Variable

CPP:
#include <iostream>

class foo
{
public:
    foo  (void) {}
    ~foo (void) {}
};

int main (void)
{
    std::cout << "Typidentifizierung mit RTTI (sehr langsam!)" << std::endl;
    std::cout << "-------------------------------------------" << std::endl;
    {
        std::cout << typeid(float).name() << std::endl;

        int x = 90;
        std::cout << typeid(x).name() << std::endl;

        int *y = new int[1];
        y[0] = 44;
        std::cout << typeid(y).name() << std::endl;
        delete y;

        foo bar;
        std::cout << typeid(bar).name() << std::endl;
    }
   
    std::cout << std::endl;
    std::cout << "Variablenname Ausgeben per Makro" << std::endl;
    std::cout << "-------------------------------------------" << std::endl;
    {
#define VARIABEL_BRASSEL_NAME(value) #value

        int variable1 = 44;
        int variable2 = 55;

        std::cout << VARIABEL_BRASSEL_NAME(variable1) << " = " << variable1 << std::endl;
        std::cout << VARIABEL_BRASSEL_NAME(variable2) << " = " << variable2 << std::endl;

#undef VARIABEL_BRASSEL_NAME
    }
    std::cin.get ();

    return 0;
}


Der Output des Programms:
Code:
Typidentifizierung mit RTTI (sehr langsam!)
-------------------------------------------
float
int
int *
class foo

Variablenname Ausgeben per Makro
-------------------------------------------
variable1 = 44
variable2 = 55


- Patrick, der Pate
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 17.01.2005, 15:50    Titel: Antworten mit Zitat

jo, thx, jetzt hab ichs!
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 17.01.2005, 15:51    Titel: Antworten mit Zitat

oh yeah *kaffee schlürf*

- Patrick, der den Kaffee Trinkt
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 17.01.2005, 18:04    Titel: Antworten mit Zitat

Hi,

mit Templatespezialisierungen kann mans auch erreichen, sogar ohne RTTI, falls der Typ vorhanden ist:
CPP:
template<<typename T>typename T> inline const char* typeID (T value)
{ return (typeid(T).name()); }

template<> inline const char* typeID (double value)
{ return ("double"); }
template<> inline const char* typeID (float value)
{ return ("float"); }
template<> inline const char* typeID (int value)
{ return ("int"); }
template<> inline const char* typeID (unsigned int value)
{ return ("unsigned int"); }


// aufruf:       
// float x = 3.14f;
// std::string name(typeID(x));


- Patrick

edit: Verdammte kacke noch mal, wieso ersetzt der die Klammern von template <typename T> nicht? Verdammter scheiss HTML Code *argh aufreg* Zum kotzen.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum