在 boost::spirit 文档中,语法是使用 struct 定义的。例如,
template <typename Iterator>
struct my_grammar
: qi::grammar<Iterator, qi::locals<std::string>, ascii::space_type >
{
my_grammar()
: my_grammar::base_type(start, "start")
{
// using this and that
// rules and action etc.
}
};
我想知道我是否可以使用类来编写它(如果不能,那为什么?)。我正在这样做。
在头文件中
template<typename Iterator>
class my_grammar
{
public:
my_grammar();
// rules declaration goes here.
};
并在源文件中
template<typename Iterator>
my_grammar::my_grammar()
: qi::grammar::base_type(start, "start")
{
// write grammar and actions.
}
名称空间已使用 typedef 缩短。我正在使用上述方法编写,编译器给了我太多难以理解的错误。基本上没问题还是我在做一些奇怪的事情?
你能指出一些有人使用类而不是结构来编写语法的代码吗?
更新 :
我现在无法链接。它说undefined reference to
dimacs_grammar<__gnu_cxx::__normal_iterator, std::allocator >> >::my_grammar()` 。问题是在使用结构时,我在写
my_grammar()
: my_grammar::base_type(start, "start")
我不确定如何为此编写等效的类声明和定义?