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