创建一个凤凰函数用于精神规则

时间:2013-03-07 19:44:22

标签: c++ boost boost-spirit boost-phoenix

我正在尝试使下面的代码编译,但是,像往常一样,精神/凤凰的错误并没有提供很多关于错误的线索。任何人都可以看到问题所在吗?

#include <boost/spirit/include/phoenix.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/shared_ptr.hpp>


typedef boost::shared_ptr<int> sptr;


struct bar
{
    template <typename A> struct result
    {
        typedef sptr type;
    };

    template <typename A> sptr operator()(A) const
    {
        return sptr();
    }
};


boost::phoenix::function<bar> foo;


void test()
{
    namespace qi = boost::spirit::qi;
    using qi::_val;

    qi::rule
    <
        std::string::const_iterator,
        sptr(),
        boost::spirit::ascii::space_type
    >
        test_rule = qi::eps [ _val = foo() ];
}

1 个答案:

答案 0 :(得分:0)

正如ildjarn所说,对foo的调用错过了一个论点。