put-get-helper-eg.cpp

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

CPP
59
字号
//=======================================================================// Copyright 2001 Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee, //// 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 <vector>#include <string>#include <boost/property_map.hpp>#ifdef BOOST_NO_STD_ITERATOR_TRAITS#error This examples requires a compiler that provides a working std::iterator_traits#endifnamespace foo{  using namespace boost;    template < class RandomAccessIterator, class IndexMap >    class iterator_property_map:public boost::put_get_helper <    typename std::iterator_traits < RandomAccessIterator >::reference,    iterator_property_map < RandomAccessIterator, IndexMap > >  {  public:    typedef std::ptrdiff_t key_type;    typedef typename std::iterator_traits < RandomAccessIterator >::value_type      value_type;    typedef typename std::iterator_traits < RandomAccessIterator >::reference      reference;    typedef boost::lvalue_property_map_tag category;      iterator_property_map(RandomAccessIterator cc = RandomAccessIterator(),                            const IndexMap & _id =                            IndexMap()):iter(cc), index(_id)    {    }    reference operator[] (std::ptrdiff_t v) const    {      return *(iter + get(index, v));    }  protected:      RandomAccessIterator iter;    IndexMap index;  };}intmain(){  typedef std::vector < std::string > vec_t;  typedef foo::iterator_property_map < vec_t::iterator,    boost::identity_property_map > pmap_t;  using namespace boost;  function_requires < Mutable_LvaluePropertyMapConcept < pmap_t, int > >();  return 0;}

⌨️ 快捷键说明

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