【发布时间】:2012-10-29 01:34:01
【问题描述】:
我正在使用 boost::tokenizer 来读取类似 CSV 的文件。我将令牌存储在std::vector 中。它运作良好,但我只想为每个令牌存储一个boost::iterator。
我试过了:
#include <string>
#include <boost/tokenizer.hpp>
#include <boost/range/iterator_range.hpp>
typedef std::string::const_iterator string_iter;
typedef boost::iterator_range<string_iter> string_view;
int main(){
std::string line;
std::vector<string_view> contents;
boost::tokenizer<boost::escaped_list_separator<char>, string_iter, string_view> tok(line.begin(), line.end());
contents.assing(tok.begin(), tok.end());
}
但是编译失败:
/usr/include/boost/token_functions.hpp:在“bool”的实例化中 boost::escaped_list_separator::operator()(InputIterator&, InputIterator, Token&) [with InputIterator = __gnu_cxx::__normal_iterator >;令牌 = boost::iterator_range<:__normal_iterator>>;字符 = 字符;性状 = std::char_traits]': /usr/include/boost/token_iterator.hpp:70:11: 'void boost::token_iterator::initialize() [with TokenizerFunc = boost::escaped_list_separator;迭代器 = __gnu_cxx::__normal_iterator >;类型 = boost::iterator_range<:__normal_iterator>>]' /usr/include/boost/token_iterator.hpp:77:63:需要来自 'boost::token_iterator::token_iterator(TokenizerFunc, Iterator, Iterator) [with TokenizerFunc = boost::escaped_list_separator;迭代器 = __gnu_cxx::__normal_iterator >;类型 = boost::iterator_range<:__normal_iterator>>]' /usr/include/boost/tokenizer.hpp:86:53: 来自'boost::tokenizer::iter boost::tokenizer::begin() const [with TokenizerFunc = boost::escaped_list_separator;迭代器 = __gnu_cxx::__normal_iterator >;类型 = boost::iterator_range<:__normal_iterator>>; boost::tokenizer::iter = boost::token_iterator, __gnu_cxx::__normal_iterator >, boost::iterator_range<:__normal_iterator> > >]’ /home/wichtounet/dev/gooda-to-afdo-converter/src/gooda_reader.cpp:58:37: 从这里需要/usr/include/boost/token_functions.hpp:187:16: 错误:'tok += (& 下一个)->__gnu_cxx::__normal_iterator<_iterator _container>::operator* >()' /usr/include/boost/token_functions.hpp:193:11: 错误:不匹配 'tok += (& 下一个)->__gnu_cxx::__normal_iterator<_iterator _container>::operator* >()' /usr/include/boost/token_functions.hpp: 在“void”的实例化中 boost::escaped_list_separator::do_escape(iterator&, iterator, Token&) [with iterator = __gnu_cxx::__normal_iterator >;令牌 = boost::iterator_range<:__normal_iterator>>;字符 = 字符;性状 = std::char_traits]’: /usr/include/boost/token_functions.hpp:176:11: 需要来自‘bool boost::escaped_list_separator::operator()(InputIterator&, InputIterator, Token&) [with InputIterator = __gnu_cxx::__normal_iterator >;令牌 = boost::iterator_range<:__normal_iterator>>;字符 = 字符;性状 = std::char_traits]’ /usr/include/boost/token_iterator.hpp:70:11: 'void boost::token_iterator::initialize() [with TokenizerFunc = boost::escaped_list_separator;迭代器 = __gnu_cxx::__normal_iterator >;类型 = boost::iterator_range<:__normal_iterator>>]' /usr/include/boost/token_iterator.hpp:77:63:需要来自 'boost::token_iterator::token_iterator(TokenizerFunc, Iterator, Iterator) [with TokenizerFunc = boost::escaped_list_separator;迭代器 = __gnu_cxx::__normal_iterator >;类型 = boost::iterator_range<:__normal_iterator>>]' /usr/include/boost/tokenizer.hpp:86:53: 来自'boost::tokenizer::iter boost::tokenizer::begin() const [with TokenizerFunc = boost::escaped_list_separator;迭代器 = __gnu_cxx::__normal_iterator >;类型 = boost::iterator_range<:__normal_iterator>>; boost::tokenizer::iter = boost::token_iterator, __gnu_cxx::__normal_iterator >, boost::iterator_range<:__normal_iterator> > >]’ /home/wichtounet/dev/gooda-to-afdo-converter/src/gooda_reader.cpp:58:37: 从这里需要/usr/include/boost/token_functions.hpp:130:9: 错误:'tok +='\012''中的'operator+='不匹配 /usr/include/boost/token_functions.hpp:134:9:错误:不匹配 'tok += (& 下一个)->__gnu_cxx::__normal_iterator<_iterator _container>::operator* >()' /usr/include/boost/token_functions.hpp:138:9: 错误:不匹配 'tok += (& 下一个)->__gnu_cxx::__normal_iterator<_iterator _container>::operator* >()' /usr/include/boost/token_functions.hpp:142:9: 错误:不匹配 'tok += (& 下一个)->__gnu_cxx::__normal_iterator<_iterator _container>::operator* >()'
我也只是尝试使用boost::token_iterator 自己计算两个迭代器,但到目前为止我还没有成功。
是否有解决方案只获取每个标记的迭代器范围而不是字符串以节省一些性能?
【问题讨论】:
标签: c++ boost boost-tokenizer