hübsche anwendung von #define
-
#define std boost
-
*plonk*
-
da kenne ich aber viel hübschere. zum beispiel
#define sin(x) sin(x/180.0*PI)
-
Wollen wir jetzt wieder in die Gosse verfallen und uns um die schönsten Präprozessoranweisungen streiten?
-
Ich bin für:
#define self (*this) #define repeat(n) for(size_t counter__=0,loop__=(n);counter__<loop__;++counter__)
Die benutz ich des öfteren wirklich.
-
Ben04 schrieb:
Ich bin für:
#define self (*this) #define repeat(n) for(size_t counter__=0,loop__=(n);counter__<loop__;++counter__)
Die benutz ich des öfteren wirklich.
*OMFG*
warum nicht gleich: http://thedailywtf.com/archive/2004/10/27/2962.aspx
-
Ben04 schrieb:
Ich bin für:
#define self (*this) #define repeat(n) for(size_t counter__=0,loop__=(n);counter__<loop__;++counter__)
Die benutz ich des öfteren wirklich.
Nene. Nene. Dafür gibts doch fertige Algorithmen in der STL.
Am weichsten finde ich natürlich sowas:foreach( Foo obj in myFooCollection ) obj.fooMethode();
-
Shade Of Mine schrieb:
Ben04 schrieb:
Ich bin für:
#define self (*this) #define repeat(n) for(size_t counter__=0,loop__=(n);counter__<loop__;++counter__)
Die benutz ich des öfteren wirklich.
*OMFG*
warum nicht gleich: http://thedailywtf.com/archive/2004/10/27/2962.aspxDa ich kein Pascal mag.
Optimizer schrieb:
Nene. Nene. Dafür gibts doch fertige Algorithmen in der STL.
Also ich wäre schon erstaunt wenn du das schöner mit irgendwelchen Templates hinkriegen würdest:
class Foo { public: Foo&operator+=(int); Foo&operator++(){ self+=1; } };
repeat(4) cout<<"Guten Tag"<<endl;
Also es ist jedenfals wesentlich schöner als ohne Makros. Und von der Sicherheit sind diese auch einbahn frei (jedensfals hab ich noch nie Probleme damit gehabt).
-
#define self (*this)
gefällt mir sogar recht gut. jedes * im code stört das auge
-
Schöner ist es vielleicht, aber nicht klarer. Es ist immer klarer, wenn man Standardmittel benutzt. Ja ich weiß, sie sind hässlich. C++ ist halt einfach hässlich, da kann man nichts machen.
Mr. N schrieb:
#define self (*this)
gefällt mir sogar recht gut. jedes * im code stört das auge
Vielleicht ist C# eine schönere Sprache für dich? Für mich auf jeden Fall. Ich halte nur nichts davon, dass dann zwanghaft auf C++ übertragen zu wollen.
-
Optimizer schrieb:
Vielleicht ist C# eine schönere Sprache für dich? Für mich auf jeden Fall. Ich halte nur nichts davon, dass dann zwanghaft auf C++ übertragen zu wollen.
Sicher, dass das von C# stammt? Ich kenn self eher von Ruby und so.
-
Mr. N schrieb:
#define self (*this)
gefällt mir sogar recht gut. jedes * im code stört das auge
volle zusimmung. ich stell gleich mal meine ide um, daß sie self als keyword färbt.
-
Mr. N schrieb:
Optimizer schrieb:
Vielleicht ist C# eine schönere Sprache für dich? Für mich auf jeden Fall. Ich halte nur nichts davon, dass dann zwanghaft auf C++ übertragen zu wollen.
Sicher, dass das von C# stammt? Ich kenn self eher von Ruby und so.
Jo, stimmt. Ich habe jetzt eigentlich mehr ans explizite Dereferenzieren gedacht. Ich weiß gar nicht, ob man in Ruby dereferenzieren muss. *nix weiß*
-
Mr. N schrieb:
#define self (*this)
gefällt mir sogar recht gut. jedes * im code stört das auge
Und was machst du, wenn du die Adresse der Instanz brauchst? Stört der Adress Operator dann nicht genauso oder nimmst du dann einfach wieder this?
Schön find ich auch sowas#define SAFE_DELETE(x) delete x; x = NULL
Sollte es etwa nicht egal sein, ob sich ein Programm beim dereferenzieren eines Nullzeigers oder eines Zeigers auf eine ungültige Adresse erhängt?
-
Sollte es etwa nicht egal sein, ob sich ein Programm beim dereferenzieren eines Nullzeigers oder eines Zeigers auf eine ungültige Adresse erhängt?
beim dereferenzieren machts keinen unterschied, aber beim delete schon. ein doppelt deletetes(omg) objekt sollte zum absturz führen, das funktioniert aber nur,wenn der pointer nicht null ist.
-
groovemaster schrieb:
Schön find ich auch sowas
#define SAFE_DELETE(x) delete x; x = NULL
Ich nicht, weil du so sauberen Ärger bekommst, wenn du das nicht in einem Block zusammenfasst.
if( blubb ) SAFE_DELETE(foo); // OMG, jetzt wird zwar gelöscht aber nicht auf 0 gesetzt.
Und darum löst man das auch viel schöner in einer Template-Funktion.
-
Optimizer schrieb:
if( blubb ) SAFE_DELETE(foo); // OMG, jetzt wird zwar gelöscht aber nicht auf 0 gesetzt.
Wieso sollte jetzt nicht auf 0 gesetzt werden?
-
Weil der Präprozessor einsetzt:
if( blubb ) delete foo; foo = NULL;
darum.
-
Schau es dir nochmal an:
if(blubb) delete foo; foo = NULL;
Es wird in jedem Fall auf 0 gesetzt! Dass das Makro trotzdem scheiße ist, darüber brauchen wir nicht reden
.
EDIT: Ach, jetzt weiß ich was du meinst. Du meinst, dass nicht innerhalb des gewünschten Scopes auf 0 gesetzt wird... War etwas verwirrend formuliert.
-
Einigen wir uns einfach darauf, dass das Makro scheiße ist.