Автоматический анализатор Boost Spirit не работает для кортежа двойных значений
-
12-11-2019 - |
Вопрос
В следующем коде я пытаюсь использовать Автопарсер Boost Spirit для последовательности или двух двойных значений, но он не компилируется.Что я здесь делаю не так?
// file main.cpp
#include <boost/tuple/tuple.hpp>
#include <boost/spirit/include/qi.hpp>
namespace qi = boost::spirit::qi;
int main()
{
boost::tuple<double, double> p;
char* i = 0;
qi::phrase_parse( i, i, p, qi::space );
// qi::phrase_parse( i, i, qi::double_ >> qi::double_, qi::space, qi::skip_flag::postskip, p );
return 0;
}
Закомментированная строка компилируется и принимает boost::tuple<double, double>
как тип атрибута qi::double_ >> qi::double_
;но ему не удается получить синтаксический анализатор из типа атрибута.Почему?
Решение
Это тот же ответ, что и в вашем другой вопрос - использовать boost::fusion::vector
вместо.
Другие советы
Он компилируется для меня (g++ 4.6.1/boost 1.46.1), если я добавляю в вашу программу следующее:
#include <boost/fusion/adapted/boost_tuple.hpp>
Я считаю, что это адаптирует boost::tuple в соответствующую последовательность boost::fusion, требуемую правилом составного атрибута последовательности:
Грэм