Pergunta

Eu tenho seguinte código:

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

GetLastError() retorna um DWORD um valor numérico, mas o construtor de std::string não aceita um DWORD.

O que posso fazer?

Foi útil?

Solução

Você quer ler sobre ostringstream:

#include <sstream>
#include <string>

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

Outras dicas

Você deseja converter o número para uma string:

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

Ou boost::lexical_cast:

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

Desde C ++ 11

std::to_string() com sobrecargas para int, long, long long, unsigned int, unsigned long, unsigned long long, float, double e long double.

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

Sim, eu sou um fã de auto .

Para usar o seu exemplo:

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

Use o lexical_cast para casos simples tal impulso como o acima:

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

Você pode usar STLSoft 's winstl :: int_to_string () , da seguinte forma:

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

Além disso, se você quiser procurar o formulário de cadeia de caracteres do código de erro, você pode usar de STLSoft winstl :: error_desc .

Havia um monte de artigos em de rel="nofollow noreferrer"> Dr. Dobb sobre isso há alguns anos: peças um , dois , três , quatro . Vai para o assunto em grande detalhe, particularmente sobre o desempenho.

Use std :: stringstream.

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

o que eu normalmente faço é:

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

Como todos os caras aqui sugerido, implementação usará stringstream.
No meu projeto atual, criamos a função

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

para criar cordas de qualquer fonte.

Assim, em nosso projeto seria

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

Tal uso de fluxos na forma sugerida não iria passar meu comentário, a menos que alguém envolvê-la.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top