سؤال

لدي ما بعد التعليمات البرمجية:

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 لحالات بسيطة مثل أعلاه:

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's حول هذا منذ بضع سنوات: الأجزاء واحد, اثنين, ثلاثة, أربعة. وبعد يذهب إلى هذا الموضوع رائعة التفاصيل، خاصة حول الأداء.

استخدم 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