std::isalpha يرمي bad_cast عند استخدامه مع Boost::locale
-
12-12-2019 - |
سؤال
أواجه بعض المشاكل في استخدام Boost::locale (1.49) على Debian 7 GNU/Linux (إصدار دول مجلس التعاون الخليجي هو 4.6.3-1).يتم حفظ الكود في cp1251.يؤدي استخدام وظائف مثل "isalpha" (أو "boost::algorithm::is_alpha") إلى حدوث استثناء (bad_cast).يبدو أنه لا يوجد جانب مناسب لهذا الفحص.إليك الكود:
#include <iostream>
#include <boost/locale.hpp>
int main ()
{
boost::locale::generator gen;
std::locale loc(gen.generate("ru_RU.cp1251"));
unsigned char debug501 = 'Б';
bool debug500 = std::isalpha(debug501, loc);
std::cout<< debug500;
return 0;
}
يعمل بدون استثناء على نظام التشغيل Windows 7 مع Visual Studio 2008.ومع ذلك، لا تزال هناك مشكلة واحدة:تم تعيين "debug500" على "خطأ" في هذه الحالة.إنه يعمل بشكل جيد فقط عندما يتم إنشاء اللغة على النحو التالي: std::locale loc(".1251")
.ولكن تظهر نفس المشكلة عندما يتم إنشاء الإعدادات المحلية عن طريق التعزيز: std::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));
.سأكون ممتنًا لو تمكن شخص ما من شرح الخطأ في الكود و/أو كيف يمكنني إجراء فحص مماثل (isalpha) باستخدام Boost وstd مع الإعدادات المحلية cp1251.
المحلول
يستبدل:
unsigned char debug501 = 'Б';
مع:
char debug501 = 'Б';