在boost :: spirit文档中,语法是使用struct定义的。例如,boost :: spirit中的类v/s结构
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")
我不知道如何写等价类的声明和定义呢?
另请注意Ken Wayne VanderLinde的回答如下 - 我没有注意到构造函数定义中缺少的模板参数,但不想在这里踩到他的脚趾...... – 2012-01-05 21:52:19
除了一些链接问题外,它几乎可以工作。谢谢!我会尽快接受它。 '公众'做了诡计。 – Dilawar 2012-01-05 22:00:30
我已经添加了对我的问题的更新。请看看你能否帮忙! – Dilawar 2012-01-05 23:05:57