Frage

Ich habe folgenden Code:

Tools::Logger.Log(string(GetLastError()), Error);

GetLastError() Gibt ein DWORD einen numerischen Wert, aber der Konstruktor von std::string akzeptiert keine DWORD.

Was kann ich tun?

War es hilfreich?

Lösung

Sie möchten Ostringstream lesen:

#include <sstream>
#include <string>

int main()
{
   std::ostringstream stream;
   int i = 5;
   stream << i;
   std::string str = stream.str();
} 

Andere Tipps

Sie wollen die Nummer auf eine string konvertieren:

std::ostringstream os;
os << GetLastError();
Log(os.str(), Error);

oder boost::lexical_cast:

Log(boost::lexical_cast<std::string>(GetLastError()), Error);

Da C ++ 11

std::to_string() mit Überlastungen für int, long, long long, unsigned int, unsigned long, unsigned long long, float, double und long double.

auto i = 1337;
auto si = std::to_string(i); // "1337"
auto f = .1234f;
auto sf = std::to_string(f); // "0.123400"

Ja, ich bin ein Fan von auto .

Ihr Beispiel verwenden:

Tools::Logger.Log(std::to_string(GetLastError()), Error);

Mit Boost- lexical_cast für einfache Fälle solcher wie oben:

Tools::Logger.Log(lexical_cast<string>(GetLastError()), Error);

Sie können mit STLSoft 's winstl :: INT_TO_STRING () wie folgt:

Tools::Logger.Log(winstl::int_to_string(GetLastError()), Error);

Auch wenn Sie die Zeichenfolge Form des Fehlercodes nachschlagen möchten, können Sie STLSoft der Dr. Dobbs darüber vor ein paar Jahren: Teile ein , zwei , drei , vier . Geht in das Thema in groß Detail, vor allem über die Leistung.

Mit std :: string.

std::stringstream errorStream;
errorStream << GetLastError();
Tools::Logger.Log(errorStream.str(), Error);

, was ich normalerweise tun ist:

std::ostringstream oss;
oss << GetLastError() << " :: " << Error << std::endl;
Tools::Logger.Log(oss.str()); // or whatever interface is for logging

Wie alle Jungs hier vorgeschlagen, wird die Umsetzung string verwenden.
In meinem aktuellen Projekt haben wir Funktion

template <typename T>
std::string util::str::build( const T& value );

string aus einer beliebigen Quelle erstellen.

So in unserem Projekt wäre es

Tools::Logger.Log( util::str::build(GetLastError()) );

Eine solche Verwendung von Strömen in der vorgeschlagenen Art und Weise passieren würde nicht meine Kritik, es sei denn jemand es wickeln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top