sf_bug_720917.cpp

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

CPP
116
字号
/*=============================================================================    Copyright (c) 2003 Giovanni Bajo    Copyrigh (c) 2003 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_multi_pass.hpp>#include <iterator>#include "impl/sstream.hpp"#include <boost/detail/lightweight_test.hpp>using namespace std;using namespace BOOST_SPIRIT_CLASSIC_NS;// Test for bug #720917 // http://sf.net/tracker/index.php?func=detail&aid=720917&group_id=28447&atid=393386//// Check that it's possible to use multi_pass// together with standard library as a normal iterator//// a functor to test out the functor_multi_passclass my_functor{    public:        typedef char result_type;        my_functor()            : c('A')        {}        char operator()()        {            if (c == 'M')                return eof;            else                return c++;        }        static result_type eof;    private:        char c;};my_functor::result_type my_functor::eof = '\0';////////////////////////////////////////////////// four types of multi_pass iteratorstypedef multi_pass<    my_functor,    multi_pass_policies::functor_input,    multi_pass_policies::first_owner,    multi_pass_policies::no_check,    multi_pass_policies::std_deque> functor_multi_pass_t;typedef multi_pass<istream_iterator<char> > default_multi_pass_t;typedef look_ahead<istream_iterator<char>, 6> fixed_multi_pass_t;typedef multi_pass<    istream_iterator<char>,    multi_pass_policies::input_iterator,    multi_pass_policies::first_owner,    multi_pass_policies::buf_id_check,    multi_pass_policies::std_deque> first_owner_multi_pass_t;////////////////////////////////////////////////// the test casestemplate <typename IterT>void construct_string_from(void){    sstream_t ss;    ss << "test string";    IterT mpend;    istream_iterator<char> a(ss);    IterT mp1(a);    std::string dummy;#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS    dummy.assign(mp1, mpend);#else    copy(mp1, mpend, inserter(dummy, dummy.end()));#endif}template <>void construct_string_from<functor_multi_pass_t>(void) {    functor_multi_pass_t mpend;    functor_multi_pass_t mp1 = functor_multi_pass_t(my_functor());    std::string dummy;#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS    dummy.assign(mp1, mpend);#else    copy(mp1, mpend, inserter(dummy, dummy.end()));#endif}////////////////////////////////////////////////// Definition of the test suiteintmain(){    construct_string_from<default_multi_pass_t>();    construct_string_from<fixed_multi_pass_t>();    construct_string_from<first_owner_multi_pass_t>();    construct_string_from<functor_multi_pass_t>();    return boost::report_errors();}

⌨️ 快捷键说明

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