В документации 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.
}
Пространство имен было закорочено с использованием typedefs.Я пишу с использованием вышеуказанного метода, и компилятор выдает мне слишком много ошибок, которые трудно понять.Это в принципе нормально или я делаю что-то странное?
Можете ли вы указать мне какой-нибудь код, где кто-то использовал класс вместо struct для написания грамматики?
ОБНОВЛЕНИЕ:
Я не могу связать сейчас.В нем говорится, что undefined reference to
dimacs_grammar <__ gnu_cxx :: __ normal_iterator, std :: allocator>>> :: my_grammar () `.Проблема в том, что при использовании struct я писал
my_grammar()
: my_grammar::base_type(start, "start")
Я не уверен, как написать эквивалентное объявление класса и определение для этого?