Ein sauberer und eleganter (aber nicht effizienter) Weg, um einen bestimmten Typ in %code% umzuwandeln, ist
%code%
von
%code%
Der Typ, der konvertiert werden soll, muss das übliche "& lt; & lt;" Operator für Ostream.
Beispiel Verwendung: %code%
Ich habe eine Boost-Variante, die so aussieht: typedef boost::variant<int, float, double, long, bool, std::string, boost::posix_time::ptime> variant;
Ich muss in der Lage sein, einen der Werte in dieser Variante in eine std :: string umzuwandeln. Ich habe mich gefragt, ob es eine Template-Funktion gibt, die ich dafür verwenden könnte?
Oder was wäre der effektivste Weg?
Ich würde momentan eine Menge überladener Funktionen implementieren, die jeweils einen Typ annehmen und dann die Konvertierung mit std::stringstream
durchführen oder für posix_time
würde ich die Konvertierungsfunktion verwenden. Vielleicht gibt es einen besseren Weg?
Benutze boost :: lexical_cast , was die ganze stringstream
ding hinter einem praktischen Wrapper. Dies funktioniert auch mit boost :: posix_time, da es eine passende operator<<
hat.
Siehe generisch von boost :: variant & lt; T & gt; tippen . Sie sollten diese Antwort an Ihre Situation anpassen können. Sie können boost::lexical_cast
für alle Ihre Typen verwenden, mit Ausnahme von boost::posix_time::ptime
, wo Sie wahrscheinlich eine spezielle Lösung benötigen. All dies in static_visitor
mit Operatorüberladung (Vorlage + eine für ptime).
Versuchen Sie Folgendes:
%Vor% Siehe generisch von boost :: variant & lt; T & gt; tippen . Sie sollten diese Antwort an Ihre Situation anpassen können. Sie können std::string
für alle Ihre Typen verwenden, mit Ausnahme von template<typename Target, typename Source> Target lexical_cast(const Source& arg);
, wo Sie wahrscheinlich eine spezielle Lösung benötigen. All dies in #include <boost/lexical_cast.hpp>
mit Operatorüberladung (Vorlage + eine für ptime).
Ich habe eine Boost-Variante, die so aussieht: std::string s = boost::lexical_cast<std::string>( 17 );
assert( s == "17" );
Ich muss in der Lage sein, einen der Werte in dieser Variante in eine std :: string umzuwandeln. Ich habe mich gefragt, ob es eine Template-Funktion gibt, die ich dafür verwenden könnte?
Oder was wäre der effektivste Weg?
Ich würde momentan eine Menge überladener Funktionen implementieren, die jeweils einen Typ annehmen und dann die Konvertierung mit %code% durchführen oder für %code% würde ich die Konvertierungsfunktion verwenden. Vielleicht gibt es einen besseren Weg?
Ein sauberer und eleganter (aber nicht effizienter) Weg, um einen bestimmten Typ in %code% umzuwandeln, ist
%code%
von
%code%
Der Typ, der konvertiert werden soll, muss das übliche "& lt; & lt;" Operator für Ostream.
Beispiel Verwendung: %code%
Benutze boost :: lexical_cast , was die ganze %code% ding hinter einem praktischen Wrapper. Dies funktioniert auch mit boost :: posix_time, da es eine passende %code% hat.