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

📄 smartptr.h

📁 Windows Mobile平台上使用GDI+。GDI+功能很强大
💻 H
📖 第 1 页 / 共 4 页
字号:
        }        ReferenceType operator*()        {            KP::OnDereference(GetImplRef(*this));            return SP::operator*();        }        ConstReferenceType operator*() const        {            KP::OnDereference(GetImplRef(*this));            return SP::operator*();        }        bool operator!() const // Enables "if (!sp) ..."        { return GetImpl(*this) == 0; }        static inline T * GetPointer( const SmartPtr & sp )        { return GetImpl( sp ); }        // Ambiguity buster        template        <            typename T1,            template <class> class OP1,            class CP1,            template <class> class KP1,            template <class> class SP1,            template <class> class CNP1        >        bool operator==(const SmartPtr<T1, OP1, CP1, KP1, SP1, CNP1 >& rhs) const        { return GetImpl(*this) == GetImpl(rhs); }        // Ambiguity buster        template        <            typename T1,            template <class> class OP1,            class CP1,            template <class> class KP1,            template <class> class SP1,            template <class> class CNP1        >        bool operator!=(const SmartPtr<T1, OP1, CP1, KP1, SP1, CNP1 >& rhs) const        { return !(*this == rhs); }        // Ambiguity buster        template        <            typename T1,            template <class> class OP1,            class CP1,            template <class> class KP1,            template <class> class SP1,            template <class> class CNP1        >        bool operator<(const SmartPtr<T1, OP1, CP1, KP1, SP1, CNP1 >& rhs) const        { return GetImpl(*this) < GetImpl(rhs); }        // Ambiguity buster        template        <            typename T1,            template <class> class OP1,            class CP1,            template <class> class KP1,            template <class> class SP1,            template <class> class CNP1        >        inline bool operator > ( const SmartPtr< T1, OP1, CP1, KP1, SP1, CNP1 > & rhs )        {            return ( GetImpl( rhs ) < GetImpl( *this ) );        }        // Ambiguity buster        template        <            typename T1,            template <class> class OP1,            class CP1,            template <class> class KP1,            template <class> class SP1,            template <class> class CNP1        >        inline bool operator <= ( const SmartPtr< T1, OP1, CP1, KP1, SP1, CNP1 > & rhs )        {            return !( GetImpl( rhs ) < GetImpl( *this ) );        }        // Ambiguity buster        template        <            typename T1,            template <class> class OP1,            class CP1,            template <class> class KP1,            template <class> class SP1,            template <class> class CNP1        >        inline bool operator >= ( const SmartPtr< T1, OP1, CP1, KP1, SP1, CNP1 > & rhs )        {            return !( GetImpl( *this ) < GetImpl( rhs ) );        }    private:        // Helper for enabling 'if (sp)'        struct Tester        {            Tester(int) {}            void dummy() {}        };        typedef void (Tester::*unspecified_boolean_type_)();        typedef typename Select<CP::allow, Tester, unspecified_boolean_type_>::Result            unspecified_boolean_type;    public:        // enable 'if (sp)'        operator unspecified_boolean_type() const        {            return !*this ? 0 : &Tester::dummy;        }    private:        // Helper for disallowing automatic conversion        struct Insipid        {            Insipid(PointerType) {}        };        typedef typename Select<CP::allow, PointerType, Insipid>::Result            AutomaticConversionResult;    public:        operator AutomaticConversionResult() const        { return GetImpl(*this); }    };////////////////////////////////////////////////////////////////////////////////// friends////////////////////////////////////////////////////////////////////////////////#ifndef LOKI_ENABLE_FRIEND_TEMPLATE_TEMPLATE_PARAMETER_WORKAROUND    template    <        typename T,        template <class> class OP,        class CP,        template <class> class KP,        template <class> class SP,        template <class> class CNP    >    inline void Release(SmartPtr<T, OP, CP, KP, SP, CNP>& sp,                        typename SP<T>::StoredType& p)    {      p = GetImplRef(sp);      GetImplRef(sp) = SP<T>::Default();    }    template    <        typename T,        template <class> class OP,        class CP,        template <class> class KP,        template <class> class SP,        template <class> class CNP    >    inline void Reset(SmartPtr<T, OP, CP, KP, SP, CNP>& sp,                      typename SP<T>::StoredType p)    { SmartPtr<T, OP, CP, KP, SP, CNP>(p).Swap(sp); }#endif////////////////////////////////////////////////////////////////////////////////// free comparison operators for class template SmartPtr///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  operator== for lhs = SmartPtr, rhs = raw pointer///  \ingroup SmartPointerGroup////////////////////////////////////////////////////////////////////////////////    template    <        typename T,        template <class> class OP,        class CP,        template <class> class KP,        template <class> class SP,        template <class> class CNP1,        typename U    >    inline bool operator==(const SmartPtr<T, OP, CP, KP, SP, CNP1 >& lhs,        U* rhs)    { return GetImpl(lhs) == rhs; }///////////////////////////////////////////////////////////////////////////////////  operator== for lhs = raw pointer, rhs = SmartPtr///  \ingroup SmartPointerGroup////////////////////////////////////////////////////////////////////////////////    template    <        typename T,        template <class> class OP,        class CP,        template <class> class KP,        template <class> class SP,        template <class> class CNP1,        typename U    >    inline bool operator==(U* lhs,        const SmartPtr<T, OP, CP, KP, SP, CNP1 >& rhs)    { return rhs == lhs; }///////////////////////////////////////////////////////////////////////////////////  operator!= for lhs = SmartPtr, rhs = raw pointer///  \ingroup SmartPointerGroup////////////////////////////////////////////////////////////////////////////////    template    <        typename T,        template <class> class OP,        class CP,        template <class> class KP,        template <class> class SP,        template <class> class CNP,        typename U    >    inline bool operator!=(const SmartPtr<T, OP, CP, KP, SP, CNP >& lhs,        U* rhs)    { return !(lhs == rhs); }///////////////////////////////////////////////////////////////////////////////////  operator!= for lhs = raw pointer, rhs = SmartPtr///  \ingroup SmartPointerGroup////////////////////////////////////////////////////////////////////////////////    template    <        typename T,        template <class> class OP,        class CP,        template <class> class KP,        template <class> class SP,        template <class> class CNP,        typename U    >    inline bool operator!=(U* lhs,        const SmartPtr<T, OP, CP, KP, SP, CNP >& rhs)    { return rhs != lhs; }///////////////////////////////////////////////////////////////////////////////////  operator< for lhs = SmartPtr, rhs = raw pointer///  \ingroup SmartPointerGroup////////////////////////////////////////////////////////////////////////////////    template    <        typename T,        template <class> class OP,        class CP,        template <class> class KP,        template <class> class SP,        template <class> class CNP,        typename U    >    inline bool operator<(const SmartPtr<T, OP, CP, KP, SP, CNP >& lhs,        U* rhs)    {        return ( GetImpl( lhs ) < rhs );    }///////////////////////////////////////////////////////////////////////////////////  operator< for lhs = raw pointer, rhs = SmartPtr///  \ingroup SmartPointerGroup////////////////////////////////////////////////////////////////////////////////    template    <        typename T,        template <class> class OP,        class CP,        template <class> class KP,        template <class> class SP,        template <class> class CNP,        typename U    >    inline bool operator<(U* lhs,        const SmartPtr<T, OP, CP, KP, SP, CNP >& rhs)    {        return ( GetImpl( rhs ) < lhs );    }//////////////////////////////////////////////////////////////////////////////////  operator> for lhs = SmartPtr, rhs = raw pointer///  \ingroup SmartPointerGroup////////////////////////////////////////////////////////////////////////////////    template    <        typename T,        template <class> class OP,        class CP,        template <class> class KP,        template <class> class SP,        template <class> class CNP,        typename U    >    inline bool operator>(const SmartPtr<T, OP, CP, KP, SP, CNP >& lhs,        U* rhs)    { return rhs < lhs; }///////////////////////////////////////////////////////////////////////////////////  operator> for lhs = raw pointer, rhs = SmartPtr///  \ingroup SmartPointerGroup////////////////////////////////////////////////////////////////////////////////    template    <        typename T,        template <class> class OP,        class CP,        template <class> class KP,        template <class> class SP,        template <class> class CNP,        typename U    >    inline bool operator>(U* lhs,        const SmartPtr<T, OP, CP, KP, SP, CNP >& rhs)    { return rhs < lhs; }///////////////////////////////////////////////////////////////////////////////////  operator<= for lhs = SmartPtr, rhs = raw pointer///  \ingroup SmartPointerGroup////////////////////////////////////////////////////////////////////////////////    template    <        typename T,        template <class> class OP,        class CP,        template <class> class KP,        template <class> class SP,        template <class> class CNP,        typename U    >    inline bool operator<=(const SmartPtr<T, OP, CP, KP, SP, CNP >& lhs,        U* rhs)    { return !(rhs < lhs); }///////////////////////////////////////////////////////////////////////////////////  operator<= for lhs = raw pointer, rhs = SmartPtr///  \ingroup SmartPointerGroup////////////////////////////////////////////////////////////////////////////////    template    <        typename T,        template <class> class OP,        class CP,        template <class> class KP,        template <class> class SP,        template <class> class CNP,        typename U    >    inline bool operator<=(U* lhs,        const SmartPtr<T, OP, CP, KP, SP, CNP >& rhs)    { return !(rhs < lhs); }///////////////////////////////////////////////////////////////////////////////////  operator>= for lhs = SmartPtr, rhs = raw pointer///  \ingroup SmartPointerGroup////////////////////////////////////////////////////////////////////////////////    template    <        typename T,        template <class> class OP,        class CP,        template <class> class KP,        template <class> class SP,        template <class> class CNP,        typename U    >    inline bool operator>=(const SmartPtr<T, OP, CP, KP, SP, CNP >& lhs,        U* rhs)    { return !(lhs < rhs); }///////////////////////////////////////////////////////////////////////////////////  operator>= for lhs = raw pointer, rhs = SmartPtr///  \ingroup SmartPointerGroup////////////////////////////////////////////////////////////////////////////////    template    <        typename T,        template <class> class OP,        class CP,        template <class> class KP,        template <class> class SP,        template <class> class CNP,        typename U    >    inline bool operator>=(U* lhs,        const SmartPtr<T, OP, CP, KP, SP, CNP >& rhs)    { return !(lhs < rhs); }} // namespace Loki///////////////////////////////////////////////////////////////////////////////////  specialization of std::less for SmartPtr///  \ingroup SmartPointerGroup////////////////////////////////////////////////////////////////////////////////namespace std{    template    <        typename T,        template <class> class OP,        class CP,        template <class> class KP,        template <class> class SP,        template <class> class CNP    >    struct less< Loki::SmartPtr<T, OP, CP, KP, SP, CNP > >        : public binary_function<Loki::SmartPtr<T, OP, CP, KP, SP, CNP >,            Loki::SmartPtr<T, OP, CP, KP, SP, CNP >, bool>    {        bool operator()(const Loki::SmartPtr<T, OP, CP, KP, SP, CNP >& lhs,            const Loki::SmartPtr<T, OP, CP, KP, SP, CNP >& rhs) const        { return less<T*>()(GetImpl(lhs), GetImpl(rhs)); }    };}#endif // end file guardian

⌨️ 快捷键说明

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