2012-12-02 31 views
4

我試圖建立一個接受形式的字符串解析器「/整數/(/整數/)」,併產生一個std ::元組 權現在我有:的boost ::精神,如何獲得一個佔位符的「價值」

qi::rule<string::iterator,std::tuple<int,int>()> parser = 
     (qi::int_ >> '(' >> qi::int_ >> ')')[_val = std::make_tuple(qi::_1,qi::_2)] 

其犯規編譯,因爲佔位符氣:: _我是正確的types.How的不是「提取」從一個佔位符潛在價值?

回答

2

呃,你可以使用自動屬性傳播(又名「自動規則」。):

#include <boost/spirit/include/qi.hpp> 
#include <boost/fusion/adapted.hpp> 
#include <tuple> 

namespace qi = boost::spirit::qi; 

main(int argc, char* argv[]) 
{ 
    qi::rule<std::string::iterator,std::tuple<int,int>()> parser; 

    parser = 
     (qi::int_ >> '(' >> qi::int_ >> ')') 
     ; 
} 

注爲std::tuple的適應融合序列的附加頭。