C++Spirit Boost:将输入迭代器转换为前向迭代器

C++ Spirit Boost: Making a input iterator into a forward iterator

本文关键字:迭代器 转换 输入 Boost C++Spirit      更新时间:2023-10-16

所以我对Boost很陌生,但在vs2010中的win32应用程序项目中,我在尝试做一些最基本的事情时遇到了问题。

我已经进入了我的vs2010项目属性,并确保我的include文件位于正确的位置,当我构建时,我不会在stdafx.h中收到错误,包括来自boost的hpp文件,但是当我在他们的网站上阅读文档时:http://www.boost.org/doc/libs/1_43_0/libs/spirit/doc/html/spirit/support/multi_pass.html我只是得到一堆基本错误,比如multi_pass是未定义的。

我只需要boost做一件事,那就是从我当前的输入操作符创建一个正向操作符,这样我就可以通过一个函数传递它。下面是我的输入运算符的声明。

std::istreambuf_iterator<char> eof;

我在同一页上找到了一个替代解决方案,其中std::basic_stream_iterator实际上是一个正向运算符,但当我编译时,我收到一个错误,说basic_stream_iterator不是std库的一部分。

最后,我对迭代器本身和boost真的很陌生。我想知道如何将输入迭代器转换为前向迭代器,以便在文件中进行迭代器。

与注释siad一样,您需要包含正确的支持标头。

#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/support_multi_pass.hpp>

然而,最简单的方法是:

std::ifstream file("myfile.txt", std::ios::binary);
file.unsetf(std::ios::skipws);
// use the ready-made:
boost::spirit::istream_iterator f(file), l;
// parse!
book ok = qi::parse(f, l, my_grammar);