كيفية استخدام واسع سلسلة حرفية في c++ دون وضع L أمام كل واحد
سؤال
عليك أن يغفر جهلي ولكن أنا لا يستعمل على نطاق مجموعات الأحرف في c++, ولكن هل هناك طريقة التي يمكن استخدامها على نطاق سلسلة حرفية في c++ دون وضع L أمام كل الحرفي ؟
إذا كان الأمر كذلك ، كيف ؟
المحلول
لا، ليست هناك. لديك لاستخدام البادئة L (أو ماكرو مثل _T () مع VC ++ التي تتسع لL على أي حال عندما جمعت يونيكود).
نصائح أخرى
الجديد C++0x معيار يحدد طريقة أخرى للقيام بذلك:
http://en.wikipedia.org/wiki/C%2B%2B0x#New_string_literals
وعلى صعيد ذات صلة .. أنا أحاول أن تفعل ما يلي
#define get_switch( m ) myclass::getSwitch(L##m)
والذي هو الماكرو ستوسع
get_switch(isrunning)
في
myclass::getswitch(L"isrunning")
وهذا يعمل بشكل جيد في ج ++ visualstudio 2008
ولكن عندما جمع نفس الرمز في ظل ماك إكس كود (آي فون) أحصل على خطأ:
error: 'L' was not defined in this scope.
وتحرير: الحل
#define get_switch( m ) myclass::getSwitch(L ## #m)
وهذا يعمل على كلا الرأسمالي ++ وكسكودي ماك (دول مجلس التعاون الخليجي)
لماذا لا تريد بادئة سلسلة حرفية مع L؟ انها بسيطة جدا - سلاسل دون L هي سلاسل ANSI (const char*
)، سلاسل مع L هي حرف واسعة سلاسل (const wchar_t*
). هناك الماكرو TEXT()
، مما يجعل سلسلة حرفية إلى ANSI أو سلسلة حرف واسعة اعتمادا على المشروع الحالي وتعيين لاستخدام Uncode:
#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif
وهناك أيضا الماكرو _T()
، وهو ما يعادل TEXT()
.