Spirit.QiのSemanticActionではまった(というかPhoenix)
#include <iostream> #include <string> #include <boost/spirit/include/qi.hpp> namespace qi = boost::spirit::qi; namespace ascii = boost::spirit::ascii; int main() { std::string const data = "0.123670"; unsigned int result = 0; using ascii::space_type; using qi::_val; using qi::_1; using qi::_2; typedef std::string::const_iterator Iterator; typedef qi::rule<Iterator, unsigned int(), ascii::space_type> x_rule_t; x_rule_t xvalue_; xvalue_ %= (qi::uint_ >> qi::omit['.'] >> qi::uint_)[_val = (qi::_1 * 1000000u + qi::_2)]; //(1) Iterator beg = data.begin(); bool const r = qi::phrase_parse(beg, data.end(), xvalue_, ascii::space, result); if(r) { std::cout << "read : " << result << std::endl; } else { std::cout << "error : " << std::string(beg, data.end()) << std::endl; } }
浮動小数点以下6桁の固定小数点数を整数にして読み込みしようとこんなコード書いたんですが、(1)の所でエラーが出まして、よく分からなかったんですが、
#include <boost/spirit/include/phoenix_operator.hpp>
すれば行けました。
QiだけインクルードしておけばPhoenixも全部使えるかなーと思ってたんですが、ちゃんとPhoenixの機能を使おうと思うと、そっちのヘッダもインクルードする必要があったのですねー・・・