快速启动

使用进行预处理波浪高度可配置。你必须定义几个选项来控制它您可以定义的选项:

包括搜索路径定义搜索要包含的文件的位置#包括<…>#包括“…”指令
 其中要预定义的宏以及要取消定义的预定义宏
 是否启用C的几个扩展中的任何一个++标准(例如变量和位置标记)

您可以通过boost::wave::context对象。因此,必须实例化此类型的一个对象实例才能使用波浪库。(有关上下文模板类的更多信息,请参阅指向类引用在这里.)实例化这个boost::wave::context对象,您必须提供至少两个模板参数:要使用的底层输入流的迭代器类型和用作预处理引擎的标记源的lexer迭代器的类型。

不要自己实例化主预处理迭代器。boost::wave::context对象。以下代码段取自快速启动(_S)示例,其中显示了波浪.

//下面对给定的输入文件进行预处理。//打开文件并将其读入字符串变量
    标准::ifstream河道内(“input.cpp”);标准::字符串输入(标准::istreambuf_iterator(instream.rdbuf()),标准::istreambuf_iterator());//模板boost::wave::cpplexer::lex_token是//Wave库使用的标记类型。//此标记类型是贯穿始终的中心类型之一//库,因为它对某些人来说是一个模板参数//并返回//来自迭代器。//模板boost::wave::cpplexer::lex_iterator是//用作标记源的lexer迭代器//预处理引擎。在这种情况下,这是参数化的//标记类型为。
    类型定义 boost::wave::cpplexer::lex_iterator<
            boost::wave::cpplexer::lex_token<> >
        词汇标识符类型;
    类型定义 boost::wave::context<标准::字符串::迭代器,词汇标识符类型>
        上下文类型;context_type ctx(input.begin(),input.end(),“输入.cpp”);//此时,您可能需要设置//预处理为包含路径和/或预定义宏。ctx.add包含路径("...");ctx.add_macro_definition(…);//获取预处理器迭代器并使用它们生成//标记序列。context_type::iterator_type first=ctx.begin();context_type::iterator_type last=ctx.end();//在迭代期间为您预处理输入流
//超过[第一,最后]
虽然(第一!=最后){标准::cout<<(*first).get_value();++第一;}

的构造函数boost::wave::context对象可以取一对任意迭代器类型(至少输入整流器类型迭代器),输入流必须提供要处理的数据。第三个参数提供一个文件名,该文件名在预处理器输出中报告给指示当前上下文。但是请注意,使用了这个文件名只要没有#包括#线路遇到指令,这反过来会改变当前报告的文件名。

对预处理标记的迭代相对简单。只需从上下文对象获取开始迭代器和结束迭代器(可能在初始化了一些include搜索路径之后)就完成了!取消引用迭代器将返回在上生成的预处理标记来自输入流的fly。(要获得有关令牌类型的更多信息,你可能想看看在这里.)