Ich möchte mein eigenes Objekt in einem STL-Stream aber mit angepasster Formatierung ausgeben. Ich habe mir so etwas ausgedacht, aber da ich nie das Gebietsschema benutzt habe und erst dann habe ich keine Ahnung, ob das sinnvoll ist und wie man MyFacet und den Operator < < implementiert.Wie formatiere ich meine eigenen Objekte bei der Verwendung von STL-Streams?
Also meine Fragen sind: macht das Sinn und wie MyFacet und Operator < < zu implementieren?
Das folgende ist ein vereinfachtes Beispiel, das Ihnen zeigt, was ich tun möchte.
struct MyObject
{
int i;
std::string s;
};
std::ostream &operator<<(std::ostream &os, const MyObject &obj)
{
if (????)
{
os << obj.i;
}
else
{
os << obj.s;
}
}
MyObject o;
o.i = 1;
o.s = "hello";
std::cout.imbue(locale("", new MyFacet(MyFacet::UseInt)));
std::cout << o << std::endl; // prints "1"
std::cout.imbue(locale("", new MyFacet(MyFacet::UseString)));
std::cout << o << std::endl; // prints "hello"
Ich stimme zu, ein externer Schalter wäre einfacher und das ist, was ich zuerst kam. Aber dann brauchte ich auch eine Datumsformatierung, die vom Gebietsschema abhängt, und dann dachte ich, warum sollte man nicht dieselbe Methode für alles verwenden, um sie konsistent zu halten. Da ich aber STL und locales nicht zu gut kenne, war meine Frage auch, ob es Sinn macht oder nicht;) – rve
Danke für den Link, es erklärt wirklich, wie ich das umsetzen könnte. Jetzt muss ich noch entscheiden, ob ich das Gebietsschema dafür "missbrauchen" soll oder nicht ... – rve