Qt используя std :: use_facet с wstring - PullRequest
       19

Qt используя std :: use_facet с wstring

0 голосов
/ 18 сентября 2009

Мне нужен кроссплатформенный код, чтобы пропустить начальные пробелы для широкой строки. Похоже, что g ++ (и, очевидно, Qt) вообще не инициализирует слоты для широкой строки Таким образом, следующий код прекрасно работает для VC ++, но почти g ++ не работает с исключением bad_cast:

#include <string>
#include <locale>
#include <iostream>

int main()
{
    typedef std::ctype<std::wstring::value_type> vtct;
    std::wstring str=L"      1122";
    const std::wstring::value_type* unspace = 
        std::use_facet<vtct>( std::locale::classic() ).
            scan_not(std::ctype_base::space|std::ctype_base::punct, 
            str.c_str(), str.c_str() + str.length());
   //std::cout << unspace << std::endl;
   wprintf(L"{%s}\n", unspace);
   return 0;
}

Согласно спецификации: "исключение bad_cast, когда хранилище фасетов в объекте локали не содержит фасет с запрошенным языковым стандартом :: id"

Итак, общий вопрос, как g ++ работает с широкой строкой? Более узкий вопрос - как инициализировать грани хотя бы для ctype?

Обновление : после некоторых экспериментов я обнаружил, что linux g ++ правильно инициализирует фасет для широкой строки - поэтому код работает. Очевидно, описанная проблема является особенностью, только если mingw.

Ответы [ 2 ]

1 голос
/ 22 сентября 2009

Используете ли вы MingGW? Их стабильная версия не поддерживает wchar_t .

Я использую поддержку широких символов C ++ (также и фасеты) в g ++ в Linux без каких-либо проблем.

Мне пришлось сделать так, чтобы мой код поддерживал режим компиляции только для узких символов, чтобы работать с MinGW.

0 голосов
/ 18 сентября 2009

Я стараюсь не использовать поддержку локализации STL, потому что:

  • это сложно
  • Насколько я могу судить, поддержка компилятора не так хороша.

Поскольку вы упомянули Qt, вы можете попытаться создать QString из wstring и проверить, какие символы являются пробелами, с помощью QChar :: isSpace.

См. этот ресурс для получения дополнительной помощи по локализации C ++. Содержит ссылку на приложение Б.Струструпа о локализации.

...