2014-02-14 1 views
2

Интересно, почему qi::rule с атрибутом должен быть объявлен как это:Почему атрибуты boost :: qi rules должны быть объявлены в скобках?

qi::rule<string::iterator, std::string(), ascii:space_type> 

И не так, как это

qi::rule<string::iterator, std::string, ascii:space_type> 

Какой бы более естественным для меня. Я даже не знал, что первая форма будет действительным экземпляром шаблона, и я до сих пор не понимаю, как это может быть.

Можете ли вы объяснить, что трюк?

ответ

4

Нет трюка. Тип атрибута: неstd::string. Это функция , которая возвращаетstd::string. Потому что это по существу то, что правило Qi (если вы достаточно сильно жужжание): это функция, которая анализирует фрагмент текста и возвращает анализируемое значение.

Это всего лишь один из возможных типов атрибутов. Другие правила принимают значения, и, следовательно, являются функциями, которые имеют параметр:

qi::rule<string::iterator, void(std::string), ascii::space_type> end_tag; 

Это пример из Qi documentation.

+0

Теперь все кажется ясным. Спасибо :) –