私は次のコードを持っています:
Tools::Logger.Log(string(GetLastError()), Error);
GetLastError()
DWORD
は数値を返しますが、 のコンストラクタstd::string
は を受け入れませんDWORD
。
私に何ができる?
あなたは ostringstream を読みたい:
#include <sstream>
#include <string>
int main()
{
std::ostringstream stream;
int i = 5;
stream << i;
std::string str = stream.str();
}
数値をに変換したい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
上記のような単純なケースにはBoost を使用します。
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博士の記事がたくさんありました:パート1、2、3、4。特にパフォーマンスについて、非常に詳細に説明します。
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()) );
提案された方法でのストリームのそのような使用法は、誰かがそれをラップしない限り、私のレビューに合格しません.