Question

J'ai le code suivant:

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

GetLastError() renvoie une DWORD une valeur numérique, mais le constructeur de std::string n'accepte pas DWORD.

Que puis-je faire?

Était-ce utile?

La solution

Vous voulez lire sur ostringstream:

#include <sstream>
#include <string>

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

Autres conseils

Vous voulez convertir le nombre à un string:

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

Ou boost::lexical_cast:

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

Depuis C ++ 11

std::to_string() avec pour int surcharges, long, long long, unsigned int, unsigned long, unsigned long long, float, double et long double.

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

Oui, je suis fan de auto.

Pour utiliser votre exemple:

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

lexical_cast pour les cas simples, comme ci-dessus:

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

Vous pouvez utiliser STLSoft 's winstl :: INT_TO_STRING () , comme suit:

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

En outre, si vous voulez rechercher la forme de chaîne du code d'erreur, vous pouvez utiliser de STLSoft Dr Dobb à ce sujet il y a quelques années: parties un , deux , trois , quatre . Qui entre dans le sujet dans grand détail, en particulier sur la performance.

Utilisez std :: stringstream.

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

ce que je fais normalement est:

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

Comme tous les gars ici ont suggéré, la mise en œuvre utilisera stringstream.
Dans mon projet actuel, nous avons créé la fonction

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

pour créer la chaîne à partir d'une source.

Donc, dans notre projet, il serait

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

Une telle utilisation des cours d'eau de la manière suggérée ne serait pas passer mon examen, à moins que quelqu'un l'envelopper.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top