22

私は次のコードを持っています:

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

GetLastError()DWORDは数値を返しますが、 のコンストラクタstd::stringは を受け入れません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()intlonglong longunsigned intunsigned longunsigned long longfloatdoubleおよびのオーバーロードを使用し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

lexical_cast上記のような単純なケースにはBoost を使用します。

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博士の記事がたくさんありまし:パート1、2、3、4。特にパフォーマンスについて、非常に詳細に説明します

于 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 に答える