Eri*_*off 3 c++ istream-iterator wstring
我正在尝试使用此线程中找到的方法拆分字符串,但我正在尝试将其调整为wstring.但是,我偶然发现了一个奇怪的错误.检查代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
确切的错误消息是:
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&)'
Run Code Online (Sandbox Code Playgroud)
我认为它说它不能使用传递的实例化istream_iterator iss(这是一个w istringstream而不是istringstream).这是在使用XCode和GCC 4.2的Mac上.和AFAIK没有wistring_iterator或类似的东西.
当我使用非wstring版本时它完美地工作.正如您可能看到我已经更改了要使用的声明wstring,wistringstreams和vector<wstring>,只是将所有内容替换为使用宽版本.
什么可能导致这个,为什么它不接受wstring-version?
根据错误消息的后半部分,您必须覆盖istream_iterator()上的默认参数2和3,以匹配其他地方的widechar用法.在Visual C++中,这个版本为我编译好了:
copy(istream_iterator<wstring, wchar_t, std::char_traits<wchar_t> >(iss), // I DO NOT GET THE ERROR HERE
istream_iterator<wstring, wchar_t, std::char_traits<wchar_t> >(),
back_inserter< vector<wstring> >(tokens));
Run Code Online (Sandbox Code Playgroud)