在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