Konvertierungsoperator problem
-
Es gibt sogar eigentlich gar keinen Grund, wieso ein
std::wstringgrösser sein soll, als ein normalerstd::string. Das eine ist einstd::basic_string<wchar_t>und das andere einstd::basic_string<char>.std::basic_stringist sehr wahrscheinlich nicht spezialisiert und intern haben beide wohl nur einen Zeiger auf ein Array vonwchar_toderchar, und ein Zeiger ist ja wohl noch gleichgross. Bei mir gibtsizeofjedenfalls für beide 28 Bytes aus.Grüssli
-
Ihr geht leider von thema weg.
Thema ist: lösung zum problem konvertierungsoperator
-
JnZn558 schrieb:
Ihr geht leider von thema weg.
Thema ist: lösung zum problem konvertierungsoperatorBenutze keinen Konvertierungsoperator, sondern implementiere entsprechende Streamoperatoren, ist deutlich sinnvoller:
#include <ostream> class CTest { private: wchar_t* str; // LPWSTR ist WinAPI hat nichts mit C++ zu tun. // ... friend std::wostream& operator <<(std::wostream& out, CTest const& test) { return out << test.str; } }Wieso genau der Konvertierungsoperator hier nicht funktioniert, kann ich grad nicht sagen. Müsste ich zuerst im Standard nachlesen gehen. Allerdings verhalten sich der MSVC 2008 und der aktuelle TDM G++ so. Damit ist die Wahrscheinlichkeit gross, dass es im Standard so definiert ist. Ich werde mal ein wenig blättern gehen.
Grüssli
-
Benutze keinen Konvertierungsoperator, sondern implementiere entsprechende Streamoperatoren, ist deutlich sinnvoller:
Kommt auf den verwendungzwekc an^^
Wenn nur ausgegeben werden soll wie hier bringt der echt nix^^LPWSTR ist WinAPI hat nichts mit C++ zu tun.
Vllt. will er das Als eine WinAPI Klasse verwenden und gibt deshalb LPWSTR da an?
Schonmal dadran gedacht?^^
-
JnZn558 schrieb:
Ihr geht leider von thema weg.
Thema ist: lösung zum problem konvertierungsoperatorDas Problem ist nicht der Konvertierungsoperator sondern das wofür du ihn einsetzen willst. Und für das Problem ist der Konvertierungsoperator der falsche Weg. Die Lösung hab ich dir oben schon geschrieben.
-
Wikinger75 schrieb:
Kommt auf den verwendungzwekc an^^
Wenn nur ausgegeben werden soll wie hier bringt der echt nix^^natürlich nicht^^
man will ja immer nur ausgeben, und dafür geht operator<< nicht^^
lieber gefährliche konvertierungsoperatoren die auch in unerwünschten situationen zu umwandlungen führen^^Vllt. will er das Als eine WinAPI Klasse verwenden und gibt deshalb LPWSTR da an?
Schonmal dadran gedacht?^^kein grund das mit std::wstring zu verwenden^^
und rate mal wofür LPWSTR steht^^
-
typedef WCHAR* LPWSTR
std::string bzw wstring ist doch auch ein String Klasse;
und bei der Klassen funktionieren folgendes. funktionieren die auch nur mit operator<< überladung?std::wstring test = "Hallo"; wcout << test << endl;
-
JnZn558 schrieb:
funktionieren die auch nur mit operator<< überladung?
Ja.
std::stringundstd::wstringhaben gar keinen Konvertierungsoperator drin. Wenn man an ein entsprechendes Array rankommen möchte, muss man die Methodec_stroderdataverwenden.http://www.cplusplus.com/reference/string/operator<</
http://www.cplusplus.com/reference/string/string/c_str/
http://www.cplusplus.com/reference/string/string/data/Konvertierungsoperatoren werden im allgemeinen in C++ sehr selten genutzt. Die Konvertierung findet nämlich implizit und daher oft unsichtbar statt. Unsichtbare Operationen sind meistens schlecht für die Übersicht.
Grüssli
-
Konvertierungsoperatoren werden im allgemeinen in C++ sehr selten genutzt. Die Konvertierung findet nämlich implizit und daher oft unsichtbar statt. Unsichtbare Operationen sind meistens schlecht für die Übersicht.danke sehr, das ist eine ordentliche antwort
-
JnZn558 schrieb:
danke sehr, das ist eine ordentliche antwort
... die ich dir im Übrigen auch schon ganz am Anfang gegebebn hatte:
pumuckl schrieb:
Und außerdem würd ich von Konvertierungs-Operatoren absehen sondern lieber eine explizite toString()-Funktion benutzen. Konvertierungsoperatoren können ziemlich unangenehme Überraschungen bereiten (siehe entsprechender Abschnitt hier und/oder Scott Meyers' Effective C++).
-
thx all 4 help