質問

以下のようなコード:

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() intlonglong longunsigned intためのオーバーロードと、 unsigned 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);

このような単純な例のためにブーストの lexical_cast に使用します上記のように:

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

利用できる STLSoft's winstl::int_to_string(), 下記の通り

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

また希望する場合には、検索文字列形式のエラーコードを使用できSTLSoftの winstl::error_desc.

がんの記事 Dr 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