سؤال

في الكود التالي الذي أحاول استخدامه تعزيز المحلل التلقائي الروح لتسلسل أو اثنين من الزوجي، لكنه لا يجمع.ما الخطأ الذي أفعله هنا؟

// 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 مطابقًا، والذي تتطلبه قاعدة سمة مركب التسلسل:

http://www.boost.org/doc/libs/1_48_0/libs/spirit/doc/html/spirit/qi/quick_reference/compound_attribute_rules.html

جراهام

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top