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
|
Verfasst am: 17.01.2005, 14:32 Titel: __FILE__ __LINE__ Makros |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 17.01.2005, 15:34 Titel: |
|
|
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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 17.01.2005, 18:04 Titel: |
|
|
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 |
|
 |
|