dword에서 std :: 문자열을 어떻게 구성합니까?
문제
다음 코드가 있습니다.
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()) );
제안 된 방식으로 그러한 스트림 사용은 누군가가 그것을 감싸지 않으면 내 리뷰를 통과하지 못할 것입니다.