我是使用boost spirit
的初学者。
我想做的只是解析具有以下格式的时间的文本:
通过使用以下规则(增强文档),这非常容易
uint_parser<int, 10, 2, 2> uint2_p;
r = lexeme_d
[
boost::spirit::limit_d(0u, 23u)[uint2_p] >> ':'
>> boost::spirit::limit_d(0u, 59u)[uint2_p] >> ':'
>> boost::spirit::limit_d(0u, 59u)[uint2_p]
];
问题是我收到一个编译器错误,指出
limit_d
不是boost spirit
命名空间的成员,即使limit_d
指令位于以下 header 中boost::spirit
命名空间下:而且我已经包含了这个标题。
所以我对应该包含哪个 header 以使代码编译感到困惑(我正在使用VS2013)
附言我的代码在没有
limit_d
指令的情况下可以正常工作,因此问题肯定是由limit_d
引起的。 最佳答案
您是supposed,可以使用<boost/spirit/include/...>
中的 header ,以便Boost可以在其内部进行移位而不影响客户端代码。
include <boost/spirit/include/classic_directives.hpp>
只是您所使用的包装器的包装,但是,除了忽略一层抽象之外,您的 header 没有任何问题。
真正的问题是您使用的命名空间-boost::spirit
-与应该使用的命名空间-boost::spirit::classic
。
IIRC,当新的Spirit v2 API出现并试图修复Spirit "Header Hell"时,他们将以前的boost::spirit
转换为boost::spirit::classic
的几个版本。
#include <boost/spirit/include/classic_directives.hpp>
namespace bspirit = boost::spirit::classic;
int main()
{
bspirit::limit_d( 0u, 23u );
}
如果您不担心编译时间更长,并且不想弄清楚到底要使用哪个头文件,那么当然可以简单地使用
#include <boost/spirit/include/classic.hpp>
并完成它。 ;-)关于c++ - 为了在boost spirit中使用limit_d指令,我应该包括哪些头文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32073898/