Standard lib/Klasse zur konvertierung von Datentypen.
-
Hallo eine der Sachen die für mich imemrwieder aufs neue eine Barriere beim Programmieren von C++ darstellt ist das Konvertieren von Datentypen in einen anderen.
Daher meine Frage ob es keine Standardklasse gibt die man einfach in seinen Code Includen kann damit man beispielsweise beim erweitern von bereits bestehendem Code nicht ständig zig Klassen erweitern muss um eine Rechenoperation oder ggf eine Ausgabe zwecks Debugging durchuzuführen.
mfg
-
Du kannst durch das überladen eines Operators eine Konvertierung zulassen. Aber alles konvertieren zu wollen ist eine schlechte Idee, denn eine stärke von C++ ist die Typensicherheit.
Kleines und einfaches Beispiel:
class MyClass { private: std::string m_message; public: operator std::string() { return m_message; } };HTH
rya.
-
Danke aber ich will nicht alles konvertieren nur möchte ich wenn ich mit bestehenden API´s arbeite mir nicht alle 5 Minuten gedanken darum machen müssen wie ich eine unsigned int in eine float, einen Vector in ein Array, einen String in eine Float ... verwandeln muss um mal eben on the Fly etwas durchzutesten, denn wenn ich alle 5 Minuten 30 Minuten brauche um zu ergooglen welche der doch einigen C synthaxen von 20 Beispielen die ich finde mir ein benutzbares ergebniss bringt ist das sehr entmutigend.
mfg
-
WeakPeak schrieb:
Danke aber ich will nicht alles konvertieren nur möchte ich wenn ich mit bestehenden API´s arbeite mir nicht alle 5 Minuten gedanken darum machen müssen wie ich eine unsigned int in eine float, einen Vector in ein Array, einen String in eine Float ... verwandeln muss um mal eben on the Fly etwas durchzutesten, denn wenn ich alle 5 Minuten 30 Minuten brauche um zu ergooglen welche der doch einigen C synthaxen von 20 Beispielen die ich finde mir ein benutzbares ergebniss bringt ist das sehr entmutigend.
mfg
unsigned int i = static_cast<unsigned int>(myFloat); //Vector to C-Array: &vec[0]; // string in float: float f = boost::lexical_cast<float, std::string>(myString);
-
Konvertierungen zwischen allen arithmetischen Typen sind implizit möglich. Für Strings kannst du
std::stringstreamoderboost::lexical_cast()nehmen. Um Vektoren aus Arrays zu erstellen, kannst du den Konstruktor mit der Iterator-Range benutzen. Das sind (bis auf Boost) alles Standardlösungen, die ein C++-Programmierer kennen sollte.Ich halte es nicht für sinnvoll, alle möglichen Umwandlungen in einer Klasse zu haben. Sobald man nämlich die Low-Level-Typen wie
intunddoubleverlässt, hängt es sehr von den genauen Anforderungen ab, wie eine Konvertierung stattfinden soll. C++ bietet alleine schon vier Builtin-Cast-Operatoren, je nach Anwendungsbereich. Bei selbstdefinierten Typen wird die Sache noch einmal komplexer.
-
Scorcher24 schrieb:
float f = boost::lexical_cast<float, std::string>(myString);Wozu das 2. Template-Argument angeben? Der Source-Typ kann ja "hergeleitet" werden.
float f = boost::lexical_cast<float>(myString);