Форум программистов, компьютерный форум CyberForum.ru

std::string -> std::wstring - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,581
Записей в блоге: 17
05.07.2012, 23:12     std::string -> std::wstring #1
Как перевести данный код в код с использованием wstring ( посути использовать std::vector<std::wstring> refs; )

C++
1
2
3
4
5
#include <vector>
#include <string>
#include <fstream>
#include <iterator>
std::vector<std::string> refs;
C++
1
2
3
4
5
6
7
8
std::string file_name="Результат.txt";
std::ofstream ofs1(file_name.c_str());
if(ofs1)
   {
    std::ostream_iterator<std::string>b(ofs1,"\n");
    std::copy(refs.begin(),refs.end(),b);
    ofs1.close();
   }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.07.2012, 00:17     std::string -> std::wstring #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <vector>
#include <string>
#include <fstream>
#include <iterator>
std::vector<std::wstring> refs;
std::string file_name="Результат.txt";
std::wofstream ofs1(file_name.c_str());
if(ofs1)
   {
    std::ostream_iterator<std::wstring>b(ofs1,"\n");
    std::copy(refs.begin(),refs.end(),b);
    ofs1.close();
   }
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,581
Записей в блоге: 17
06.07.2012, 00:21  [ТС]     std::string -> std::wstring #3
Пробовал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
std::vector<std::wstring> refs;
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
std::string file_name="Результат.txt";
std::wofstream ofs1(file_name.c_str());
if(ofs1)
   {
    std::ostream_iterator<std::wstring>b(ofs1,"\n");// !!! Could not find a match for 'std::ostream_iterator<std::wstring,char,std::char_traits<char> >::ostream_iterator(std::wofstream,const wchar_t *)'
    std::copy(refs.begin(),refs.end(),b);
    ofs1.close();
   }
}
//---------------------------------------------------------------------------
Builder2009
Код
[BCC32 Error] Unit1.cpp(72): E2285 Could not find a match for 'std::ostream_iterator<std::wstring,char,std::char_traits<char> >::ostream_iterator(std::wofstream,const wchar_t *)'
Наверное стоит попробывать на другом компиляторе...
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.07.2012, 00:25     std::string -> std::wstring #4
Ну тогда так.

C++
1
std::ostream_iterator<std::wstring, wchar_t, std::char_traits<wchar_t>>
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,581
Записей в блоге: 17
06.07.2012, 00:28  [ТС]     std::string -> std::wstring #5
Ага ...
C++
1
2
3
4
5
6
7
8
9
10
std::string file_name="Результат.txt";
std::wofstream ofs1(file_name.c_str());
if(ofs1)
   {
       //std::ostream_iterator<std::wstring>b(ofs1,"\n");
      std::ostream_iterator<std::wstring, wchar_t, std::char_traits<wchar_t> > b(ofs1,L"\n");
      std::copy(refs.begin(),refs.end(),b);
      ofs1.close();
   }
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.07.2012, 00:28     std::string -> std::wstring #6
Avazart, Кстати явное указание std::char_traits<wchar_t> можно убрать.
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,581
Записей в блоге: 17
06.07.2012, 00:33  [ТС]     std::string -> std::wstring #7
Понял, нужно было просто знать std::char_traits<wchar_t>, а я почему то сначала пытался найти
std::wostream_iterator по аналогии
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.07.2012, 10:02     std::string -> std::wstring #8
Avazart, Ну вообще как ни странно std::wofstream это typedef типа std::basic_ofstream<wchar_t, std::char_traits<wchar_t>>, std::wstring typedef типа std::basic_string<wchar_t, std::char_traits<wchat_t>, std::allocator<wchat_t>>.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2012, 16:20     std::string -> std::wstring
Еще ссылки по теме:

C++ Как узнать размер std::wstring в байтах?
C++ Как привести std::wstring к std::string?
C++ Std::string and std::wstring convert

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,581
Записей в блоге: 17
06.07.2012, 16:20  [ТС]     std::string -> std::wstring #9
Ну вообще то для меня не странно...
Другое дело std::ostream_iterator, а шаблон я видел, но не догадался подставить wchar_t
Yandex
Объявления
06.07.2012, 16:20     std::string -> std::wstring
Ответ Создать тему
Опции темы

Текущее время: 18:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru