3rdParty/boost/1.78.0/libs/range/doc/mfc_atl.rst
++++++++++++++++++++++++++++++++ |Boost| Range MFC/ATL Extension ++++++++++++++++++++++++++++++++
.. |Boost| image:: http://www.boost.org/libs/ptr_container/doc/boost.png
:Author: Shunsuke Sogame :Contact: [email protected] :date: 26th of May 2006 :copyright: Shunsuke Sogame 2005-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__).
__ http://www.boost.org/LICENSE_1_0.txt
Boost.Range MFC/ATL Extension provides Boost.Range_ support for MFC/ATL collection and string types.
.. parsed-literal::
CTypedPtrArray<CPtrArray, CList<CString> \*> myArray;
...
BOOST_FOREACH (CList<CString> \*theList, myArray)
{
BOOST_FOREACH (CString& str, \*theList)
{
boost::to_upper(str);
std::sort(boost::begin(str), boost::end(str));
...
}
}
Requirements_MFC Ranges_ATL Ranges_const Ranges_References_Boost C++ Libraries Version 1.34.0__ or later (no compilation required)__ Boost_
If the <boost/range/mfc.hpp> is included before or after Boost.Range_ headers,
the MFC collections and strings become models of Range.
The table below lists the Traversal Category and range_reference of MFC ranges.
============================= ================== =======================================
Range Traversal Category range_reference<Range>::type
============================= ================== =======================================
CArray<T,A> Random Access T&
CList<T,A> Bidirectional T&
CMap<K,AK,M,AM> Forward Range::CPair&
CTypedPtrArray<B,T*> Random Access T* const
CTypedPtrList<B,T*> Bidirectional T* const
CTypedPtrMap<B,T*,V*> Forward std::pair<T*,V*> const
CByteArray Random Access BYTE&
CDWordArray Random Access DWORD&
CObArray Random Access CObject* &
CPtrArray Random Access void* &
CStringArray Random Access CString&
CUIntArray Random Access UINT&
CWordArray Random Access WORD&
CObList Bidirectional CObject* &
CPtrList Bidirectional void* &
CStringList Bidirectional CString&
CMapPtrToWord Forward std::pair<void*,WORD> const
CMapPtrToPtr Forward std::pair<void*,void*> const
CMapStringToOb Forward std::pair<String,CObject*> const
CMapStringToString Forward Range::CPair&
CMapWordToOb Forward std::pair<WORD,CObject*> const
CMapWordToPtr Forward std::pair<WORD,void*> const
============================= ================== =======================================
Other Boost.Range_ metafunctions are defined by the following.
Let Range be any type listed above and ReF be the same as range_reference<Range>::type.
range_value<Range>::type is the same as remove_reference<remove_const<Ref>::type>::type,
range_difference<Range>::type is the same as std::ptrdiff_t, and
range_pointer<Range>::type is the same as add_pointer<remove_reference<Ref>::type>::type.
As for const Range, see const Ranges_.
If the <boost/range/atl.hpp> is included before or after Boost.Range_ headers,
the ATL collections and strings become models of Range.
The table below lists the Traversal Category and range_reference of ATL ranges.
============================= ================== =======================================
Range Traversal Category range_reference<Range>::type
============================= ================== =======================================
CAtlArray<E,ET> Random Access E&
CAutoPtrArray<E> Random Access E&
CInterfaceArray<I,pi> Random Access CComQIPtr<I,pi>&
CAtlList<E,ET> Bidirectional E&
CAutoPtrList<E> Bidirectional E&
CHeapPtrList<E,A> Bidirectional E&
CInterfaceList<I,pi> Bidirectional CComQIPtr<I,pi>&
CAtlMap<K,V,KT,VT> Forward Range::CPair&
CRBTree<K,V,KT,VT> Bidirectional Range::CPair&
CRBMap<K,V,KT,VT> Bidirectional Range::CPair&
CRBMultiMap<K,V,KT,VT> Bidirectional Range::CPair&
CSimpleStringT<B,b> Random Access B&
CStringT<B,ST> Random Access B&
CFixedStringT<S,n> Random Access range_reference<S>::type
CStringT<B,ST> Random Access B&
CComBSTR Random Access OLECHAR&
CSimpleArray<T,TE> Random Access T&
============================= ================== =======================================
Other Boost.Range_ metafunctions are defined by the following.
Let Range be any type listed above and ReF be the same as range_reference<Range>::type.
range_value<Range>::type is the same as remove_reference<Ref>::type,
range_difference<Range>::type is the same as std::ptrdiff_t, and
range_pointer<Range>::type is the same as add_pointer<remove_reference<Ref>::type>::type.
As for const Range, see const Ranges_.
range_reference<const Range>::type is defined by the following algorithm.
Let Range be any type listed above and ReF be the same as range_reference<Range>::type.
.. parsed-literal::
if (Range is CObArray || Range is CObList)
return CObject const \* &
else if (Range is CPtrArray || Range is CPtrList)
return void const \* &
else if (there is a type X such that X& is the same as ReF)
return X const &
else if (there is a type X such that X* const is the same as ReF)
return X const \* const
else
return ReF
Other Boost.Range_ metafunctions are defined by the following.
range_value<const Range>::type is the same as range_value<Range>::type,
range_difference<const Range>::type is the same as std::ptrdiff_t, and
range_pointer<const Range>::type is the same as add_pointer<remove_reference<range_reference<const Range>::type>::type>::type.
Boost.Range_MFC Collections__ATL Collection Classes____ http://msdn2.microsoft.com/en-us/library/942860sh.aspx __ http://msdn2.microsoft.com/en-US/library/15e672bd.aspx
.. _Boost C++ Libraries: http://www.boost.org/
.. Boost: Boost C++ Libraries
.. _Boost.Range: ../index.html
.. _forward: range.html#forward_range
.. _bidirectional: range.html#forward_range
.. _random access: range.html#random_access_range