alternative.cpp

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

CPP
88
字号
/*=============================================================================    Copyright (c) 2001-2007 Joel de Guzman    Copyright (c) 2001-2008 Hartmut Kaiser    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_operator.hpp>#include <boost/spirit/include/qi_char.hpp>#include <boost/spirit/include/qi_string.hpp>#include <boost/spirit/include/qi_numeric.hpp>#include <boost/spirit/include/qi_action.hpp>#include <boost/spirit/include/qi_directive.hpp>#include <boost/spirit/include/support_argument.hpp>#include <boost/spirit/include/phoenix_core.hpp>#include <boost/spirit/include/phoenix_operator.hpp>#include <boost/variant.hpp>#include <string>#include <iostream>#include "test.hpp"using namespace spirit_test;intmain(){    using namespace boost::spirit;    {        BOOST_TEST((test("a", char_ | char_)));        BOOST_TEST((test("x", char_('x') | char_('i'))));        BOOST_TEST((test("i", char_('x') | char_('i'))));        BOOST_TEST((!test("z", char_('x') | char_('o'))));        BOOST_TEST((test("rock", lit("rock") | lit("roll"))));        BOOST_TEST((test("roll", lit("rock") | lit("roll"))));        BOOST_TEST((test("rock", lit("rock") | int_)));        BOOST_TEST((test("12345", lit("rock") | int_)));    }    {        boost::variant<unused_type, int, char> v;        BOOST_TEST((test_attr("12345", lit("rock") | int_ | char_, v)));        BOOST_TEST(boost::get<int>(v) == 12345);        BOOST_TEST((test_attr("rock", lit("rock") | int_ | char_, v)));//        BOOST_TEST(boost::get<std::string>(&v) == 0);        BOOST_TEST(boost::get<int>(&v) == 0);        BOOST_TEST(boost::get<char>(&v) == 0);        BOOST_TEST((test_attr("x", lit("rock") | int_ | char_, v)));        BOOST_TEST(boost::get<char>(v) == 'x');    }    {   // test action        using namespace boost::phoenix;        using namespace boost::spirit::arg_names;        namespace phx = boost::phoenix;        boost::variant<unused_type, int, char> v;        BOOST_TEST((test("12345", (lit("rock") | int_ | char_)[phx::ref(v) = _1])));        BOOST_TEST(boost::get<int>(v) == 12345);    }    {        boost::variant<unused_type> v;        BOOST_TEST((test("rock", lit("rock") | char_('x'))));    }    {        // test if alternatives with all components having unused        // attributes return attributes them self        using namespace boost::fusion;        vector<char, char> v;        BOOST_TEST((test_attr("abc",            char_ >> (omit[char_] | omit[char_]) >> char_, v)));        BOOST_TEST((at_c<0>(v) == 'a'));        BOOST_TEST((at_c<1>(v) == 'c'));    }    return boost::report_errors();}

⌨️ 快捷键说明

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