Можем ли мы проверить, является ли вывод локали из boost :: locale :: generator :: generate недействительным?

Это вопрос из двух частей, который начался с того, что мне стало интересно: что произойдет, если ввод идентификатора boost::locale::generator::generate() было какое-то неверное значение?

Я проверил документация и я не мог ничего найти о том, что произойдет, если мы перешли в нечто вроде test вместо en_CA.UTF-8, Я знаю, что никаких исключений не выдается, но я ожидаю, что он будет иметь некоторое указание на то, что ввод языкового стандарта был недействительным.

Я поэкспериментировал с этим и понял, что проблема возникает позже, когда я пытаюсь использовать сгенерированную локаль с коллатором. compare функция. Исключение нарушения прав доступа выдается.

Фрагмент кода ниже:

#include <string>
#include "boost/locale.hpp"#include "boost/locale/collator.hpp"
using namespace boost::locale;

void InitializeLocale( const std::string zLanguage, const std::string zCountry, std::locale & out_Locale )
{
generator gen;
gen.categories( collation_facet | formatting_facet | convert_facet );

//out_Locale = gen( zLanguage + "_" + zCountry + ".UTF-8" );
out_Locale = gen( "test" );

// TODO: Check if out_Locale is valid??
std::locale::global( out_Locale );
}

int main( int iNumArgs, char ** azArgs )
{
std::locale currentLocale;
InitializeLocale( "en", "CA", currentLocale );

// Works
std::cout << boost::locale::to_upper( "test", currentLocale ) << std::endl;
// Throws exception: Exception thrown at 0x00007FF6FFFCB8C2 in TestProgram.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
std::use_facet<boost::locale::collator<char>>( currentLocale ).compare( collator_base::secondary, "test", "TEST");
}

Вторая часть вопроса касается моей более насущной проблемы: возможно ли проверить, является ли созданный языковой стандарт недействительным или нет?

Я точно контролирую, какой идентификатор локали передается прямо сейчас, но это определенно изменится в будущем.

Или, может быть, я не понимаю, как boost::locale::collator должен быть использован?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]