access_builder.hpp
字号:
// Boost.Bimap//// Copyright (c) 2006-2007 Matias Capeletto//// 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)/// \file relation/detail/access_builder.hpp/// \brief Define macros to help building metafunctions#ifndef BOOST_BIMAP_RELATION_ACCESS_BUILDER_HPP#define BOOST_BIMAP_RELATION_ACCESS_BUILDER_HPP#if defined(_MSC_VER) && (_MSC_VER>=1200)#pragma once#endif#include <boost/config.hpp>#include <boost/bimap/relation/support/member_with_tag.hpp>#include <boost/bimap/relation/member_at.hpp>#include <boost/call_traits.hpp>#include <boost/type_traits/is_const.hpp>#include <boost/mpl/if.hpp>#include <boost/mpl/not.hpp>#include <boost/utility/enable_if.hpp>/****************************************************************************** BIMAP SYMMETRIC ACCESS RESULT OF*******************************************************************************namespace result_of {template< class Tag, class SymmetricType >struct NAME{ typedef -unspecified- type;};} // namespace result_of******************************************************************************//*===========================================================================*/#define BOOST_BIMAP_SYMMETRIC_ACCESS_RESULT_OF_BUILDER( \ \ NAME, \ METAFUNCTION_BASE \ ) \ \ namespace result_of { \ \ template< class Tag, class SymmetricType > \ struct NAME \ { \ typedef BOOST_DEDUCED_TYPENAME METAFUNCTION_BASE \ < \ Tag,SymmetricType \ \ >::type value_type; \ \ typedef BOOST_DEDUCED_TYPENAME mpl::if_< is_const<SymmetricType>, \ \ BOOST_DEDUCED_TYPENAME call_traits<value_type>::const_reference, \ \ BOOST_DEDUCED_TYPENAME call_traits<value_type>::reference \ \ >::type type; \ }; \ \ }/*===========================================================================*//****************************************************************************** BIMAP SYMMETRIC ACCESS IMPLEMENTATION*******************************************************************************namespace detail {template< class Tag, class SymmetricType >typename result_of::NAME<Tag,SymmetricType>::type NAME( Tag , const Relation & );} // namespace detail******************************************************************************//*===========================================================================*/#define BOOST_BIMAP_SYMMETRIC_ACCESS_IMPLEMENTATION_BUILDER( \ \ NAME, \ TP_SYMMETRIC, \ PARAMETER_NAME, \ LEFT_BODY, \ RIGHT_BODY \ ) \ \ namespace detail { \ \ \ \ template< class TP_SYMMETRIC > \ BOOST_DEDUCED_TYPENAME result_of::NAME \ < \ ::boost::bimaps::relation::member_at::left,TP_SYMMETRIC \ \ >::type \ \ NAME( ::boost::bimaps::relation::member_at::left, \ TP_SYMMETRIC & PARAMETER_NAME ) \ { \ LEFT_BODY; \ } \ \ template< class TP_SYMMETRIC > \ BOOST_DEDUCED_TYPENAME result_of::NAME \ < \ ::boost::bimaps::relation::member_at::right,TP_SYMMETRIC \ \ >::type \ \ NAME( ::boost::bimaps::relation::member_at::right, \ TP_SYMMETRIC & PARAMETER_NAME ) \ { \ RIGHT_BODY; \ } \ \ }/*===========================================================================*//****************************************************************************** BIMAP RELATION ACCESS INTERFACE*******************************************************************************template< class Tag, class SymmetricType >typename result_of::NAME<Tag,SymmetricType>::type NAME( const SymmetricType & );******************************************************************************//*===========================================================================*/#define BOOST_BIMAP_SYMMETRIC_ACCESS_INTERFACE_BUILDER( \ \ NAME \ ) \ \ template< class Tag, class SymmetricType > \ BOOST_DEDUCED_TYPENAME result_of::NAME<Tag,SymmetricType>::type \ NAME( SymmetricType & s ) \ { \ typedef BOOST_DEDUCED_TYPENAME ::boost::bimaps::relation::support:: \ member_with_tag \ < \ Tag,SymmetricType \ \ >::type member_at_tag; \ \ return detail::NAME(member_at_tag(),s); \ }/*===========================================================================*/#endif // BOOST_BIMAP_RELATION_ACCESS_BUILDER_HPP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -