⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 functional.hpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 HPP
📖 第 1 页 / 共 2 页
字号:
        {};        // partial specialization that promotes the arguments to double for        // integral division.        template<typename Left, typename Right>        struct average_base<Left, Right, typename enable_if<are_integral<Left, Right> >::type>          : functional::divides<double const, double const>        {};        template<typename To, typename From, typename EnableIf>        struct promote_base          : std::unary_function<From, To>        {            To operator ()(From &from) const            {                return from;            }        };        template<typename ToFrom>        struct promote_base<ToFrom, ToFrom, void>          : std::unary_function<ToFrom, ToFrom>        {            ToFrom &operator ()(ToFrom &tofrom)            {                return tofrom;            }        };        template<typename Arg, typename EnableIf>        struct as_min_base          : std::unary_function<Arg, typename remove_const<Arg>::type>        {            typename remove_const<Arg>::type operator ()(Arg &) const            {                return (std::numeric_limits<typename remove_const<Arg>::type>::min)();            }        };        template<typename Arg>        struct as_min_base<Arg, typename enable_if<is_floating_point<Arg> >::type>          : std::unary_function<Arg, typename remove_const<Arg>::type>        {            typename remove_const<Arg>::type operator ()(Arg &) const            {                return -(std::numeric_limits<typename remove_const<Arg>::type>::max)();            }        };        template<typename Arg, typename EnableIf>        struct as_max_base          : std::unary_function<Arg, typename remove_const<Arg>::type>        {            typename remove_const<Arg>::type operator ()(Arg &) const            {                return (std::numeric_limits<typename remove_const<Arg>::type>::max)();            }        };        template<typename Arg, typename EnableIf>        struct as_zero_base          : std::unary_function<Arg, typename remove_const<Arg>::type>        {            typename remove_const<Arg>::type operator ()(Arg &) const            {                return numeric::zero<typename remove_const<Arg>::type>::value;            }        };        template<typename Arg, typename EnableIf>        struct as_one_base          : std::unary_function<Arg, typename remove_const<Arg>::type>        {            typename remove_const<Arg>::type operator ()(Arg &) const            {                return numeric::one<typename remove_const<Arg>::type>::value;            }        };        template<typename To, typename From, typename ToTag, typename FromTag>        struct promote          : promote_base<To, From, void>        {};        template<typename Left, typename Right, typename LeftTag, typename RightTag>        struct min_assign          : min_assign_base<Left, Right, void>        {};        template<typename Left, typename Right, typename LeftTag, typename RightTag>        struct max_assign          : max_assign_base<Left, Right, void>        {};        template<typename Left, typename Right, typename LeftTag, typename RightTag>        struct average          : average_base<Left, Right, void>        {};        template<typename Arg, typename Tag>        struct as_min          : as_min_base<Arg, void>        {};        template<typename Arg, typename Tag>        struct as_max          : as_max_base<Arg, void>        {};        template<typename Arg, typename Tag>        struct as_zero          : as_zero_base<Arg, void>        {};        template<typename Arg, typename Tag>        struct as_one          : as_one_base<Arg, void>        {};    }    namespace op    {        template<typename To>        struct promote          : boost::detail::function1<functional::promote<To, _, typename functional::tag<To>::type, functional::tag<_> > >        {};        struct min_assign          : boost::detail::function2<functional::min_assign<_1, _2, functional::tag<_1>, functional::tag<_2> > >        {};        struct max_assign          : boost::detail::function2<functional::max_assign<_1, _2, functional::tag<_1>, functional::tag<_2> > >        {};        struct average          : boost::detail::function2<functional::average<_1, _2, functional::tag<_1>, functional::tag<_2> > >        {};        struct as_min          : boost::detail::function1<functional::as_min<_, functional::tag<_> > >        {};        struct as_max          : boost::detail::function1<functional::as_max<_, functional::tag<_> > >        {};        struct as_zero          : boost::detail::function1<functional::as_zero<_, functional::tag<_> > >        {};        struct as_one          : boost::detail::function1<functional::as_one<_, functional::tag<_> > >        {};    }    namespace    {        op::min_assign const &min_assign = boost::detail::pod_singleton<op::min_assign>::instance;        op::max_assign const &max_assign = boost::detail::pod_singleton<op::max_assign>::instance;        op::average const &average = boost::detail::pod_singleton<op::average>::instance;        op::as_min const &as_min = boost::detail::pod_singleton<op::as_min>::instance;        op::as_max const &as_max = boost::detail::pod_singleton<op::as_max>::instance;        op::as_zero const &as_zero = boost::detail::pod_singleton<op::as_zero>::instance;        op::as_one const &as_one = boost::detail::pod_singleton<op::as_one>::instance;    }    ///////////////////////////////////////////////////////////////////////////////    // promote    template<typename To, typename From>    typename lazy_disable_if<is_const<From>, mpl::if_<is_same<To, From>, To &, To> >::type    promote(From &from)    {        return functional::promote<To, From>()(from);    }    template<typename To, typename From>    typename mpl::if_<is_same<To const, From const>, To const &, To const>::type    promote(From const &from)    {        return functional::promote<To const, From const>()(from);    }    template<typename T>    struct default_    {        typedef default_ type;        typedef T value_type;        static T const value;        operator T const & () const        {            return default_::value;        }    };    template<typename T>    T const default_<T>::value = T();    template<typename T>    struct one    {        typedef one type;        typedef T value_type;        static T const value;        operator T const & () const        {            return one::value;        }    };    template<typename T>    T const one<T>::value = T(1);    template<typename T>    struct zero    {        typedef zero type;        typedef T value_type;        static T const value;        operator T const & () const        {            return zero::value;        }    };    template<typename T>    T const zero<T>::value = T();    template<typename T>    struct one_or_default      : mpl::if_<is_empty<T>, default_<T>, one<T> >::type    {};    template<typename T>    struct zero_or_default      : mpl::if_<is_empty<T>, default_<T>, zero<T> >::type    {};}} // namespace boost::numeric#endif

⌨️ 快捷键说明

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