Pregunta

Tengo siguiente código:

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

GetLastError() devuelve un DWORD un valor numérico, pero el constructor de std::string no acepta una DWORD.

¿Qué puedo hacer?

¿Fue útil?

Solución

¿Quieres leer sobre ostringstream:

#include <sstream>
#include <string>

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

Otros consejos

¿Quieres convertir el número a un string:

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

O boost::lexical_cast:

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

Desde C ++ 11

std::to_string() con sobrecargas para int, long, long long, unsigned int, unsigned long, unsigned long long, float, double y long double.

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

Sí, soy un fan de auto .

Para usar el ejemplo:

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

El uso de lexical_cast para los casos simples tales Boost como lo anterior:

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

Puede utilizar STLSoft 's winstl :: INT_TO_STRING () , como sigue:

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

Además, si desea buscar la forma de cadena del código de error, puede utilizar de STLSoft winstl :: error_desc .

Había un montón de artículos en Dr. Dobb de sobre esto hace unos años: piezas uno , dos , tres , cuatro . Entra en el tema en gran detalle, sobre todo por el rendimiento.

El uso std :: stringstream.

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

lo que hago normalmente es:

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

Como sugirieron todos los tipos de aquí, la aplicación utilizará stringstream.
En mi proyecto actual creamos la función

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

para crear la cadena de cualquier fuente.

Así que en nuestro proyecto sería

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

Tal uso de corrientes en la forma sugerida no pasaría mi opinión a menos que alguien lo envuelve.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top