pair.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 103 行

HPP
103
字号
/*=============================================================================    Copyright (c) 2005 Joel de Guzman    Copyright (c) 2006 Tobias Schwinger    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)==============================================================================*/#if !defined(FUSION_PAIR_07222005_1203)#define FUSION_PAIR_07222005_1203#include <boost/fusion/support/detail/access.hpp>#include <boost/fusion/support/detail/as_fusion_element.hpp>namespace boost { namespace fusion{    // A half runtime pair where the first type does not have data    template <typename First, typename Second>    struct pair    {        pair()            : second() {}        pair(typename detail::call_param<Second>::type val)            : second(val) {}        template <typename Second2>        pair(pair<First, Second2> const& rhs)            : second(rhs.second) {}        template <typename Second2>        pair& operator=(pair<First, Second2> const& rhs)        {            second = rhs.second;            return *this;        }        typedef First first_type;        typedef Second second_type;        Second second;    };    namespace result_of    {        template<typename First, typename Second>        struct make_pair        {            typedef fusion::pair<First,                        typename detail::as_fusion_element<Second>::type> type;        };        template<class Pair>        struct first        {            typedef typename Pair::first_type type;        };        template<class Pair>        struct second        {            typedef typename Pair::second_type type;        };    }    template <typename First, typename Second>    inline typename result_of::make_pair<First,Second>::type    make_pair(Second const& val)    {        return pair<First, typename detail::as_fusion_element<Second>::type>(val);    }    template <typename OStream, typename First, typename Second>    inline OStream&    operator<<(OStream& os, pair<First, Second> const& p)    {        os << p.second;        return os;    }    template <typename IStream, typename First, typename Second>    inline IStream&    operator>>(IStream& is, pair<First, Second>& p)    {        is >> p.second;        return is;    }    template <typename First, typename SecondL, typename SecondR>    inline bool    operator==(pair<First, SecondL> const& l, pair<First, SecondR> const& r)    {        return l.second == r.second;    }    template <typename First, typename SecondL, typename SecondR>    inline bool    operator!=(pair<First, SecondL> const& l, pair<First, SecondR> const& r)    {        return l.second != r.second;    }}}#endif

⌨️ 快捷键说明

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