Operator von Primitiven abfangen
-
Servus,
ich stehe gerade auf den Schlauch
Wie kann ich die Operatoren von int, long, float, ... abfangen?
Aus Performancegründen möchte ich dies nicht immer so haben, weswegen ich bereits überlege eine Wrapper-Struct zu erstellen und hier die Operatoren neu definiere.Was würdet ihr empfehlen?
-
Was für Performancegründe?! Mit einem Profiler nachgeprüft?
"Abfangen" kannst du die nicht. Da musst du schon eine Wrapperklasse schreiben (Was natürlich sicher mehr Performance braucht, als die POD's).
-
drakon schrieb:
Was für Performancegründe?!
POD, oh man stehe ich gerade auf den Schlauch. Könntest du das weiter erläutern?
Warum möchte ich diese Abfangen. Naja, ich schreibe gerade eine Anwendung die mit BigInteger arbeitet. Leider sind 70% der Zahlen noch mit int, long bzw. long long darstellbar und ich überlege gerade eine dyn. Verwaltung zu bauen. Hierzu wollte ich die Operatoren z.B. + abfangen und in diesen prüfen, ob ein Überlauf vorhanden ist. Falls ja, würde ich den Operator umbiegen

Das gleiche gilt für die Gleitzahlen.
Gruß,
ThomasNoch schöne Weihnachten und brost

-
Plain Old Data, in der Programmiersprache C++ eine Bezeichnung für einfache Datentypen sowie Klassen und Strukturen;
Das sind die nativen C++Datentypen wie z.B. int long char etc.
Diese werden direkt vom Compiler verarbeitet, du hast keinerlei Möglichkeit deren operatoren zu überladen.
Ich würde aber erstmal ein paar Performancetests durchführen (im Release-Modus!) bevor du dich da in was reinreitest.
-
Siassei schrieb:
Leider sind 70% der Zahlen noch mit int, long bzw. long long darstellbar und ich überlege gerade eine dyn. Verwaltung zu bauen. Hierzu wollte ich die Operatoren z.B. + abfangen und in diesen prüfen, ob ein Überlauf vorhanden ist. Falls ja, würde ich den Operator umbiegen

Du musst daran denken, dass das von der Performance her wahrscheinlich auch nicht gerade günstig ist.
- Erstens brauchst du eine If-Abfrage, um die Fälle zu unterscheiden. Die braucht auch Zeit.
- Zweitens müsstest du, falls die Zahl auch mit kleineren Datentypen darstellbar wäre, einen Cast durchführen.
- Drittens glaube ich nicht, dass BigInteger derart langsam ist, dass sich der Aufwand lohnen würde.