zoukankan      html  css  js  c++  java
  • boost之is_reference

    BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_reference,T,::boost::detail::is_reference_impl<T>::value)

    template< typename T > struct is_reference
    BOOST_TT_AUX_BOOL_C_BASE(::boost::detail::is_reference_impl<T>::value)
    {
    public:
    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(::boost::detail::is_reference_impl<T>::value)
    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference,(T))
    };
    BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,is_reference)
    ----------------------------------------------------------------------------
    BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,is_reference)忽略,BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference,(T))
    忽略,BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(::boost::detail::is_reference_impl<T>::value) 忽略,宏展开为
    template< typename T > struct is_reference
    : public ::boost::integral_constant<bool,::boost::detail::is_reference_impl<T>::value>
    {
    public:
    };

    struct is_reference_impl
    {
    BOOST_STATIC_CONSTANT(bool, value =
    (::boost::type_traits::ice_or<
    ::boost::is_lvalue_reference<T>::value, ::boost::is_rvalue_reference<T>::value
    >::value));
    };
    ::boost::is_lvalue_reference实现是两个宏定义
    BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_lvalue_reference,T,false)
    BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T&,true)
    -----------------------------------------------------------------
    BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_lvalue_reference,T,false)宏展开为
    template< typename T > struct is_lvalue_reference
    : public ::boost::integral_constant<bool, false>
    {
    public:
    };
    -----------------------------------------------------------------
    BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_lvalue_reference,T&,true)展开为
    template< typename T > struct is_lvalue_reference< T& >
    : public ::boost::integral_constant<bool, true>
    {
    public:
    };
    也就是is_lvalue_reference当T为引用时的特化版本
    ::boost::is_rvalue_reference实现由以下两个宏
    -----------------------------------------------------------------
    先是is_rvalue_reference的范型版本BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_rvalue_reference,T,false)
    template< typename T > struct is_rvalue_reference
    : public ::boost::integral_constant<bool, false>
    {
    public:
    };
    -----------------------------------------------------------------
    BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_rvalue_reference,T&&,true)
    template< typename T > struct is_rvalue_reference< T&& >
    : public ::boost::integral_constant<bool, true>
    {
    public:
    };
    -----------------------------------------------------------------
    template <bool b1, bool b2, bool b3 = false, bool b4 = false, bool b5 = false, bool b6 = false, bool b7 = false>
    struct ice_or;

    template <bool b1, bool b2, bool b3, bool b4, bool b5, bool b6, bool b7>
    struct ice_or
    {
    BOOST_STATIC_CONSTANT(bool, value = true);
    };

    template <>
    struct ice_or<false, false, false, false, false, false, false>
    {
    BOOST_STATIC_CONSTANT(bool, value = false);
    };

    ice_or只要有一个value为ture,则其value就为true,总结一下当is_reference<T>::value=true,当且仅当
    ::boost::is_lvalue_reference<T>::value=true或::boost::is_rvalue_reference<T>::value=true,
    也就是当T为T&或T&&的某种形式时is_reference<T>::value=true

  • 相关阅读:
    JavaScript优美的特性
    指尖初体验之主屏幕操作
    XHTML下css+div布局总结
    CSS表常用小技巧
    让两个DIV居中显示
    用CSS做滑动门
    CSS控制文本自动换行
    符合css规范的下拉菜单(兼容ff\ie6\ie7)
    层垂直居中于浏览器
    用css来强制按比例压缩图片的高度或宽度
  • 原文地址:https://www.cnblogs.com/wenlove/p/3087145.html
Copyright © 2011-2022 走看看