كيف يمكنني إنشاء سلسلة STD :: من DWORD؟
سؤال
لدي ما بعد التعليمات البرمجية:
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()) );
مثل هذا الاستخدام للتدفقات في الطريقة المقترحة لن يمر على مراجعتي إلا إذا لف شخص ما.