Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 13.09.2004, 19:55 Titel: ifstream Funktion |
|
|
Hi!
Hab vorhin mir grad etwas über Streams angelesen.
Ich wollte jetzt in meiner Klasse eine Funktion schreiben, die man so aufrufen kann:
Klasse.Message(<< var1 << "und hier kommt " << var2);
....::Message(argument)
{
ofstream file("datei");
file<< argument;
file.close();
}
Nur was muss argument für ein Typ sein damit das ganze funktioniert? _________________ The source of all power is in its destiny... |
|
Nach oben |
|
 |
Beni5 Super JLI'ler
Alter: 37 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 13.09.2004, 20:19 Titel: |
|
|
Ich glaube nicht dass das so einfach geht, weil das ja eigentlich ne Codezeile ist. Du könntest dir aber ne Funktion schreiben die Im String die "" erkennt. Mit den Variablen geht das aber kaum, weil du ja nur einen Parameter hast, und dort ja var1 und var2 übergeben willst. |
|
Nach oben |
|
 |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 13.09.2004, 20:34 Titel: |
|
|
Hab das jetzt so:
Klasse.Message() << var1 << "und hier kommt " << var2;
realisiert.
Würde mich aber interessieren, ob man das nicht auch mit () realisieren kann oder müsste man dazu den () Operator überladen, was ich nicht will, weil die Klasse groß ist und das dann zu unübersichtlich würde für welche "Funktion" der () Operator dann dienen würde... _________________ The source of all power is in its destiny... |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 41 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 13.09.2004, 20:46 Titel: |
|
|
Ich weiss ich liebe Macros ^^
Code: | Klasse.Message(<< var1 << "und hier kommt " << var2);
....::Message(argument)
{
ofstream file("datei");
file<< argument;
file.close();
} |
wird zu... tada:
Code: | #define StreamMessage(a) { ofstream file("datei"); file<< (a); file.close(); } |
is aber nurn Vorschlag _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
 |
Sören JLI Master Trainee

Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 13.09.2004, 21:25 Titel: |
|
|
Eigentlich sollte man inline Funktionen den Macros vorziehen, weil da halt keine typischen Macro-Fehler vorkommen können. Eine inline Funktion ist ja letzendlich vom Endprodukt ja auch genau das gleiche wie'n Macro.  |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 13.09.2004, 21:27 Titel: |
|
|
Reicht es nicht, wenn du einfach nur den <<-Operator überladest(geht das überhaupt?).
Dann könntest du wie bei cout das so schreiben:
Code: | myclass<<arg1<<"arg2"<<arg3; |
_________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 13.09.2004, 21:49 Titel: |
|
|
@The Lord of Programming:
so ähnlich hab ich das ja jetzt gelöst
@MiracleBoy:
Okay wenn das so ist, dann mach mir bitte eine inline Funktion die mir das ASSET Makro ersetzt. also ASSET(a==5); Geht nicht imho...aber wenn du das schaffst, hast du mich überzeugt! Dann schwöre ich auch nur noch auf inline Funktionen! (Die Macken von Macros kenne ich ( ) _________________ The source of all power is in its destiny... |
|
Nach oben |
|
 |
C++Builder Senior JLI'ler

Anmeldedatum: 04.10.2003 Beiträge: 235
Medaillen: Keine
|
Verfasst am: 14.09.2004, 12:12 Titel: |
|
|
inline Funktionen müssen aber nicht 100% eingesetzt werden je nach Compiler.
Was macht das ASSET(a==5) Macro? |
|
Nach oben |
|
 |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 14.09.2004, 12:45 Titel: |
|
|
Wenn der Ausdruck nicht stimmt, dann gibt er das Argument, die Zeilenummer und den Dateinamen aus.
Bsp:
x= 2;
ASSET(a==5)
Falsch also:
a==5
22
main.cpp
bei mir sieht das etwa so aus:
ich lasse die \ weg!
#define ASSERT(x)
{
cout << #x << endl
<< __LINE__ << endl
<< __FILE__ << endl;
} _________________ The source of all power is in its destiny... |
|
Nach oben |
|
 |
C++Builder Senior JLI'ler

Anmeldedatum: 04.10.2003 Beiträge: 235
Medaillen: Keine
|
Verfasst am: 14.09.2004, 13:16 Titel: |
|
|
ja gut das ist ein bisserl problematisch, aber mit dem Prototyp Assert(bool, int,char*); müsstes doch gehn. Ja gut dann ist der Aufruf etwas länger.
TheMillenium hat Folgendes geschrieben: | (Die Macken von Macros kenne ich ( ) |
Welche Macken? wenn man das Argument immer in Klammern packt und das gesamte Macro in geschweifte Klammern kann doch nix passieren oder?
Was macht denn # da vor dem x? |
|
Nach oben |
|
 |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 14.09.2004, 16:09 Titel: |
|
|
Nein geht eben nicht so, weil dann #x nicht funktioniert, das übergibt den String den man in klammern gesetzt hatte.
Dann müsste man das so aufrufen inline_assert(x==5,"x==5");
oder umwandeln...
umgeb mal nem Makro der ne if else Anweisung enthält x++;
Wirst dich ein bisschen über das Ergebnis wundern!
Bsp:
Code: | #define ABS(a) (((a)<0) ? -(a) : (a)) |
_________________ The source of all power is in its destiny... |
|
Nach oben |
|
 |
|