JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=9963b896755a1ac4b40bed5d2f65f05cMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

ifstream Funktion

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 13.09.2004, 19:55    Titel: ifstream Funktion Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beni5
Super JLI'ler


Alter: 37
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 13.09.2004, 20:19    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 13.09.2004, 20:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 41
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 13.09.2004, 20:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 13.09.2004, 21:25    Titel: Antworten mit Zitat

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. Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 13.09.2004, 21:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 13.09.2004, 21:49    Titel: Antworten mit Zitat

@The Lord of Programming:
so ähnlich hab ich das ja jetzt gelöst Very Happy

@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! Smile (Die Macken von Macros kenne ich Sad( )
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
C++Builder
Senior JLI'ler



Anmeldedatum: 04.10.2003
Beiträge: 235

Medaillen: Keine

BeitragVerfasst am: 14.09.2004, 12:12    Titel: Antworten mit Zitat

inline Funktionen müssen aber nicht 100% eingesetzt werden je nach Compiler.

Was macht das ASSET(a==5) Macro?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 14.09.2004, 12:45    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
C++Builder
Senior JLI'ler



Anmeldedatum: 04.10.2003
Beiträge: 235

Medaillen: Keine

BeitragVerfasst am: 14.09.2004, 13:16    Titel: Antworten mit Zitat

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 Sad( )


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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 14.09.2004, 16:09    Titel: Antworten mit Zitat

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! Wink

Bsp:
Code:
#define ABS(a) (((a)<0) ? -(a) : (a))

_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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