Я пытаюсь разбить строку, используя метод, найденный в this thread, но я пытаюсь адаптировать его к wstring. Однако я наткнулся на странную ошибку. Проверьте код:Не удается создать экземпляр istring_iterator с помощью wistringstream
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
int main(void)
{
wstring str(L"Börk börk");
wistringstream iss(str);
vector<wstring> tokens;
copy(istream_iterator<wstring>(iss), // I GET THE ERROR HERE
istream_iterator<wstring>(),
back_inserter< vector<wstring> >(tokens));
return 0;
}
Точное сообщение об ошибке:
error: no matching function for call to 'std::istream_iterator<std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, char, std::char_traits<char>, int>::istream_iterator(std::wistringstream&)'
Я думаю, что он говорит, что он не может создать экземпляр istream_iterator, используя переданный iss
(которое является ж istringstream вместо oftringstream). Это на Mac с использованием XCode и GCC 4.2. А AFAIK нет ни одного wistring_iterator или что-то в этом роде.
Он отлично работает, когда я использую версию, отличную от wstring. Как вы могли бы заметить, я изменил декларации на использование wstring
, wistringstream
и vector<wstring>
, просто заменив все, чтобы использовать широкую версию.
Что может быть причиной этого и почему он не примет версию wstring?