actions.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 79 行

CPP
79
字号
/*=============================================================================    Copyright (c) 2001-2008 Joel de Guzman    Distributed under the Boost Software License, Version 1.0. (See accompanying    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)=============================================================================*/#include <boost/detail/lightweight_test.hpp>#include <boost/spirit/include/qi.hpp>#include <boost/lambda/lambda.hpp>#include <boost/bind.hpp>#include <cstring>using namespace boost::spirit;int x = 0;void fun1(int const& i){    x += i;}void fun2(int i){    x += i;}struct fun_action{    void operator()(int const& i, unused_type, unused_type) const    {        x += i;    }};int main(){    {        char const *s1 = "{42}", *e1 = s1 + std::strlen(s1);        qi::parse(s1, e1, '{' >> int_[&fun1] >> '}');    }    {        char const *s1 = "{42}", *e1 = s1 + std::strlen(s1);        qi::parse(s1, e1, '{' >> int_[&fun2] >> '}');    }    {        // $$$ uncomment me! $$$        //~ char const *s1 = "{42}", *e1 = s1 + std::strlen(s1);        //~ qi::parse(s1, e1, '{' >> int_[fun2] >> '}');        //~ int ii;        //~ boost::spirit::detail::action_dispatch(fun2, ii, ii);    }    {        char const *s1 = "{42}", *e1 = s1 + std::strlen(s1);        qi::parse(s1, e1, '{' >> int_[fun_action()] >> '}');    }    {        char const *s1 = "{42}", *e1 = s1 + std::strlen(s1);        qi::parse(s1, e1, '{' >> int_[boost::bind(&fun1, _1)] >> '}');    }    {        namespace lambda = boost::lambda;        char const *s1 = "{42}", *e1 = s1 + std::strlen(s1);        qi::parse(s1, e1, '{' >> int_[lambda::var(x) += lambda::_1] >> '}');    }    BOOST_TEST(x == (42*6));    return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?