На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: JoeUser, Qraizer, Hsilgos
  
> std::string to std::wstring, С++17
    Всем привет!

    И так, какой там у нас уже стандарт вышел в С++ ? Что там у нас язык умеет? Например конвертнуть std::string в std::wstring есть возможность сделать это максимально быстро и эффективно? А то я смотрю был функционал с codecvt, но он вроде как deprecated стал(Чем они вообще в своем комитете занимаются?).
      Ему ищут варианты замены. Или делают вид, что ищут. Он deprecated, потому что оказался неудобен, и Комитет не хочет, чтобы много приложений успело его заюзать.
      Одни с годами умнеют, другие становятся старше.
        Цитата Qraizer @
        Ему ищут варианты замены. Или делают вид, что ищут. Он deprecated, потому что оказался неудобен, и Комитет не хочет, чтобы много приложений успело его заюзать.

        Это пичально :'(
        А как тогда можно без гемороя вывести в поток std::wostringstream переменную типа std::string ?

        Добавлено
        Ладно, нашел прям тут как можно с гемороем делать - Преобразование std::string в std::wstring туда и обратно, как делается?
        Но все равно это очень пичально я считаю.
          Цитата Wound @
          А как тогда можно без гемороя вывести в поток std::wostringstream переменную типа std::string ?
          У меня давно уж накидано
          ExpandedWrap disabled
            std::string  toNarrow(const std::wstring& str, const std::ctype<wchar_t>& ct = std::use_facet<std::ctype<wchar_t>>(std::locale::classic()));
            std::wstring toWide  (const std::string&  str, const std::ctype<wchar_t>& ct = std::use_facet<std::ctype<wchar_t>>(std::locale::classic()));
             
            /* -------------------------------------------*/
             
            std::string toNarrow(const std::wstring& str, const std::ctype<wchar_t>& ct)
            {
              std::string buf(str.length(), char());
             
              if (!buf.empty()) ct.narrow(str.data(), str.data()+buf.size(), '`', &buf[0]);
              return std::move(buf);
            }
             
            std::wstring toWide(const std::string& str, const std::ctype<wchar_t>& ct)
            {
              std::wstring buf(str.length(), wchar_t());
             
              if (!buf.empty()) ct.widen(str.data(), str.data()+buf.size(), &buf[0]);
              return std::move(buf);
            }
          Deprecated там этот codecvt или нет, но оно универсальнее. Но и сложнее, тут с Комитетом не поспоришь. А вообще, пользуй его на здоровье, кто не даёт-то. Окайми в отдельный там namespace к примеру, и как только, так сразу и заменишь на non deprecated.
          Одни с годами умнеют, другие становятся старше.
            Да я тут просто решил пуститься во все тяжкие, и уже больше пол года на C# опять пишу, ну решил вспомнить былое, да кругозор немного расширить. В итоге от плюсов отвык, а к шарпам привык - там то подобные выкрутасы делаются предельно легко и без напряга. А сейчас нужно было небольшой проект запилить на плюсах, в итоге вот понадобилось в поток выводить сразу и std::string и std::wstring, помню что когда то с codecvt работал и норм было, но так же помню что он deprecated, а из за этого толи предупреждение летело то ли ошибка компиляции уж не помню. Решил поискать, нашел что ниче нема такого. Весьма удивился. Уже вроде какой там? С++24 стандарт пилят? А такой нужной вещи никак не могут ввести в язык.
            За этот код тоже спасибо. Завтра прикручу уже.
            Сообщение отредактировано: Wound -
            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script Execution time: 0,1062 ]   [ 15 queries used ]   [ Generated: 21.07.19, 21:17 GMT ]