int, long usw durch Objekte ersetzen
-
Ich wollte es einfach so machen, weil ich es so schöner bzw einfacher zu benutzen finde. Ich finde ein einfach schöner wenn ich z.B.
Int Integer( 45 ); Integer.Sqrt(): Int Integer2( 44 ); Integer2 * Integer.Pow( 3 );schreiben kann.
Natürlich wird es durch die Klasse langsamer sein,
aber solange ich nichts Performencekritisches mache
ist es ja nicht soo schlimm.
-
In dem Fall denke ich, dass du auf der sicheren Seite bist, solange du nicht exorbital viele Rechenvorgänge durchführen willst.
btw: kommst du zufällig von Java?
-
ExtOOS schrieb:
Ich wollte es einfach so machen, weil ich es so schöner bzw einfacher zu benutzen finde. Ich finde ein einfach schöner wenn ich z.B.
Int Integer( 45 ); Integer.Sqrt(): Int Integer2( 44 ); Integer2 * Integer.Pow( 3 );schreiben kann.
So programmiert man aber nunmal im allgemeinen nicht in C++. Du versuchst hier, C++ krampfhaft ein Paradigma aus anderen Sprachen aufzuzwängen. Das halte ich für keine gute Idee.
-
Nein, ich komme nicht von Java.
Ich war ein paar mal kurz davor auf Java umzusteigen,
aber ich mag C++ einfach lieber. Ich weiß, eine RenderEngine sollte man
sicher nicht mit solchen Klassen schreiben, aber für meine Hobbyprojekte ist es mir egal, ob das Programm 20% langsamer läuft.
-
Wenn es Dir egal ist, was an Performance dadurch flöten geht, wieso fragst Du dann überhaupt danach?
-
ExtOOS schrieb:
aber ich mag C++ einfach lieber.
Dann benutz die Sprache doch auch so, wie sie geschaffen wurde...
-
Tachyon schrieb:
Wenn es Dir egal ist, was an Performance dadurch flöten geht, wieso fragst Du dann überhaupt danach?
Mal davon abgesehen, dass bei einer sauberen Implementierung und einem optimierenden Compiler der Performanceunterschied virtuell sein könnte, d.h. der Wrapper sollte wegoptimiert werden.
-
Danke Konrad,
habe es gerade getestet. Der gcc optimiert alles weg.Vielen Dank an alle

-
ExtOOS schrieb:
Danke Konrad,
habe es gerade getestet. Der gcc optimiert alles weg.Asche auf mein Haupt …

-
mit templates könntest du da auch schön pervers abgehen. ich mein so, dass du es dir sparen kannst, jedes mal ne methode vom leder zu reißen, wenn du ne funktion für deine klassen findest. angenommen du hast ne funktion zum quadrieren, die du jetzt auch so wie die wurzel (als methode mit seiteneffekten) verwenden willst, ohne an deinen klassen rumfuhrwerken zu wollen:
#include <iostream> #include <cmath> using namespace std; template<typename T> class Number { typedef T value_type; template<typename TT> friend ostream &operator<<(ostream &, const Number<TT> &); public: Number(T value) : m_value(value) { } template<typename F> void operator()(const F &func) { m_value = func(m_value); } private: value_type m_value; }; template<typename T> ostream &operator<<(ostream &strm, const Number<T> &num) { return strm << num.m_value; } int quad(int a) { return a*a; } int main() { Number<int> x = 49; x(sqrtf); cout << x << "\n"; x(quad); cout << x << endl; }
-
@ExtOOS: Mann kann sich auch mit nem Hammer aufn Kopf hauen, das ist auch eine dumme Idee und tut weh.
Ideen haben manche Leute...
-
finde ich auch net so cool die idee.. aber jedem das seine;) :schland:
-
Ich verwende solche Wrapper-Klassen, fast ausschließlich als Member-Variablen, weil man dann nicht so schnell vergisst sie zu initialisieren. Und außerdem kann dann gleich in der Deklaration der Default-Wert mitangegeben werden (vor allem bei multiplen Konstruktoren ist es recht nützlich).
-
hustbaer schrieb:
@ExtOOS: Mann kann sich auch mit nem Hammer aufn Kopf hauen, das ist auch eine dumme Idee und tut weh.
Ideen haben manche Leute...
- Finde ich auch.Ich finde das ganze in etwa so sinnvoll, wie die bool - Klasse, die hier rumgegeistert ist.

-
@Superlexx:
Wenn du damit leben kannst dass > 90% aller Leute die jemals deinen Code lesen werden sich "WTF!?!" denken ... dann mach das ruhig weiter so.
-
Das ist doch nur ne Menge unnützer Arbeit sowas zu schreiben.
-
Der Compiler dürfte das meiste vermutlich inlinen und der Performance unterschied dürfte gering sein. (Aber vermutlich wird Dein Binary aufgebläht). Aber wenn es Dir wichtig ist, dann mess es nach!
Aber ganz ehrlich: Wozu sich die Mühe machen? Schreib lieber sinnvollen Code in der Zeit.
Oder nutz die Zeit um folgenden Artikel durchzulesen: http://www.ddj.com/cpp/184401197
-
Die Wrapper werden in dem Code, mit dem ich zur Zeit arbeite, die wenigsten WTFs hervorrufen (wer derart simple Konstrukte nicht versteht, sollte am Code halt nicht rumfummeln). Den Grund, es so zu machen, habe ich ja bereits genannt: man braucht sich nicht darum kümmern, die Membervariablen zu initialisieren, und spart sich dadurch überflüssigen und u.U. fehleranfälligen Construktor-Code, etwa:
#include "types.h" // <- defines class Int and template class IntT class c { IntT<42> m_x; public: Int GetX() const {return m_x;} // int GetX() const {return m_x;} <- is also an option }; void f() { c cObj; assert(cObj.GetX() == 42); Int i; assert(i == 0); }Verhält sich schon ein wenig wie im C#, aber das ist erwünscht :).
-
Superlexx schrieb:
IntT<42> m_x;Wow!

Ist dir klar was du da tust, bzw anrichtest ?
-
So viele spezialisierungen werden es schon nicht sein...