22

我有以下代码:

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

GetLastError()返回 aDWORD数值,但 的构造函数std::string不接受 a DWORD

我能做些什么?

4

8 回答 8

36

您想阅读 ostringstream:

#include <sstream>
#include <string>

int main()
{
   std::ostringstream stream;
   int i = 5;
   stream << i;
   std::string str = stream.str();
} 
于 2009-05-21T16:00:31.403 回答
22

您想将数字转换为string

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

或者boost::lexical_cast

Log(boost::lexical_cast<std::string>(GetLastError()), Error);
于 2009-05-21T16:00:12.933 回答
16

自 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);
于 2014-04-16T11:48:57.283 回答
9

将 Boostlexical_cast用于上述简单情况:

Tools::Logger.Log(lexical_cast<string>(GetLastError()), Error);
于 2009-05-21T16:00:11.823 回答
2

您可以使用STLSoftwinstl::int_to_string(),如下所示:

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

另外,如果要查找错误代码的字符串形式,可以使用 STLSoft 的winstl::error_desc

几年前, Dobb 博士的文章中有很多关于此的文章:第一部分、第二部分、第三部分、第四部分。非常详细地进入主题,特别是关于性能。

于 2009-05-22T03:27:04.887 回答
1

使用 std::stringstream。

std::stringstream errorStream;
errorStream << GetLastError();
Tools::Logger.Log(errorStream.str(), Error);
于 2009-05-21T16:00:56.050 回答
0

我通常做的是:

std::ostringstream oss;
oss << GetLastError() << " :: " << Error << std::endl;
Tools::Logger.Log(oss.str()); // or whatever interface is for logging
于 2009-05-21T16:00:20.373 回答
0

正如这里所有的人所建议的那样,实现将使用 stringstream。
在我当前的项目中,我们创建了函数

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

从任何来源创建字符串。

所以在我们的项目中

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

除非有人包装它,否则以建议的方式使用流不会通过我的审查。

于 2009-05-21T16:06:33.670 回答