if_p_int_as_condition_test.cpp

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

CPP
88
字号
/*=============================================================================    Copyright (c) 2004 Martin Wille    http://spirit.sourceforge.net/    Use, modification and distribution is subject to 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/spirit/include/classic_core.hpp>#include <boost/spirit/include/classic_dynamic.hpp>#include <boost/spirit/include/classic_ast.hpp>#include <iostream>#include <boost/detail/lightweight_test.hpp>using namespace BOOST_SPIRIT_CLASSIC_NS;int the_var_to_be_tested = 0;namespace local{    template <typename T>    struct var_wrapper : public ::boost::reference_wrapper<T>    {        typedef ::boost::reference_wrapper<T> parent;        explicit inline var_wrapper(T& t) : parent(t) {}        inline T& operator()() const { return parent::get(); }    };    template <typename T>    inline var_wrapper<T>    var(T& t)    {        return var_wrapper<T>(t);    }}struct test_grammar : public grammar <test_grammar>{    template <typename ScannerT>        struct definition    {        rule <ScannerT, parser_tag <0> > test;                definition(const test_grammar& self)        {            test                = if_p(local::var(the_var_to_be_tested))                    [                        real_p                    ];        }        const rule <ScannerT, parser_tag<0> >& start() const {return test;}    };};int main(){    test_grammar gram;    tree_parse_info <const char*> result;    //predictably fails    the_var_to_be_tested = 0;    result = ast_parse("1.50", gram, space_p);    std::cout << "Testing if_p against: " << the_var_to_be_tested << std::endl;    std::cout << "success: " << result.full << std::endl;    BOOST_TEST(!result.full);    //predicatably succeeds    the_var_to_be_tested = 1;    result = ast_parse("1.50", gram, space_p);    std::cout << "Testing if_p against: " << the_var_to_be_tested << std::endl;    std::cout << "success: " << result.full << std::endl;    BOOST_TEST(result.full);    //should succeed    the_var_to_be_tested = 2;    result = ast_parse("1.50", gram, space_p);    std::cout << "Testing if_p against: " << the_var_to_be_tested << std::endl;    std::cout << "success: " << result.full << std::endl;    BOOST_TEST(result.full);    return boost::report_errors();}

⌨️ 快捷键说明

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