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 + -
显示快捷键?