문제

다음 코드가 있습니다.

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

GetLastError() 반환 a DWORD 숫자 값이지만 생성자 std::string 수락하지 않습니다 DWORD.

어떡해?

도움이 되었습니까?

해결책

Ostringstream에서 읽고 싶습니다.

#include <sstream>
#include <string>

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

다른 팁

숫자를 a로 변환하려고합니다 string:

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

또는 boost::lexical_cast:

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

C ++ 11 이후

std::to_string() 과부하가 있습니다 int, long, long long, unsigned int, unsigned long, unsigned long long, float, double, 그리고 long double.

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

예, 저는 팬입니다 auto.

예제를 사용하려면 :

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

부스트를 사용하십시오 lexical_cast 위와 같은 간단한 경우 :

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

당신이 사용할 수있는 stlsoft'에스 winstl :: int_to_string (), 다음과 같이 :

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

또한 오류 코드의 문자열 양식을 삭제하려면 stlsoft의 것을 사용할 수 있습니다. winstl :: error_desc.

많은 기사가있었습니다 Dobb 박사 몇 년 전에 이것에 대해 : 부품 하나, , , . 주제에 들어갑니다 엄청난 특히 성능에 대한 세부 사항.

std :: stringstream을 사용하십시오.

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

내가 평소에하는 일은 다음과 같습니다.

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

여기에서 모든 사람들이 제안한 것처럼 구현은 StringStream을 사용할 것입니다.
현재 프로젝트에서 우리는 기능을 만들었습니다

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

모든 소스에서 문자열을 생성합니다.

그래서 우리 프로젝트에서는 그럴 것입니다

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

제안 된 방식으로 그러한 스트림 사용은 누군가가 그것을 감싸지 않으면 내 리뷰를 통과하지 못할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top