cstring_adaptors.hpp

来自「用STL的方式封装了WindowsAPI、COM调用、ACE、ATL、MFC、W」· HPP 代码 · 共 1,601 行 · 第 1/4 页

HPP
1,601
字号
public:
    CString_iadaptor(CString &str);
    CString_iadaptor(CString *str);
/// @}

    /// Copy assignment operator
    class_type const &operator =(class_type const &rhs);
    /// Copy assignment operator
    class_type const &operator =(CString const &rhs);
    /// Assignment operator
    class_type const &operator =(LPCSTR s);
    /// Assignment operator
    class_type const &operator =(LPCWSTR s);
    /// Assignment operator
    class_type const &operator =(unsigned char const *s);

/// \name Element Access
/// @{
public:
    /// Returns a mutable (non-const) reference to the element at \c index
    ///
    /// \note The behaviour is undefined if index >= size()
    reference       operator [](size_type index);
    /// Returns a non-mutable (const) reference to the element at \c index
    ///
    /// \note The behaviour is undefined if index >= size()
    const_reference operator [](size_type index) const;
/// @}

/// \name Implementation
/// @{
private:
    friend class CString_adaptor_base<CString_iadaptor>;

    CString         &get_actual_string()
    {
        return *m_str;
    }
    CString const   &get_actual_string() const
    {
        return *m_str;
    }
/// @}

/// \name Members
/// @{
private:
    CString *m_str;
/// @}
};

/// \brief Non-mutable Adaptor class, representing an Instance Adaptor over the MFC CString type
///
/// It can be used via the std::basic_string-like interface
class const_CString_iadaptor
    : public CString_adaptor_base<const_CString_iadaptor>
{
/// \name Member Types
/// @{
private:
    typedef CString_adaptor_base<const_CString_iadaptor>    parent_class_type;
public:
    /// The class type
    typedef CString_iadaptor                                class_type;
/// @}

/// \name Construction
/// @{
public:
    const_CString_iadaptor(CString const &str);
    const_CString_iadaptor(CString const *str);
/// @}

/// \name Element Access
/// @{
public:
    /// Returns a non-mutable (const) reference to the element at \c index
    ///
    /// \note The behaviour is undefined if index >= size()
    const_reference operator [](size_type index) const;
/// @}

/// \name Implementation
/// @{
private:
    friend class CString_adaptor_base<const_CString_iadaptor>;

    CString const   &get_actual_string() const
    {
        return *m_str;
    }
/// @}

/// \name Members
/// @{
private:
    CString const   *m_str;
/// @}
};

/* /////////////////////////////////////////////////////////////////////////
 * Operators
 */

// operator ==

inline operator ==(CString_cadaptor const &lhs, CString_cadaptor const &rhs)
{
    return lhs.get_CString() == rhs.get_CString();
}
inline operator ==(CString_cadaptor const &lhs, CString const &rhs)
{
    return lhs.get_CString() == rhs;
}
inline operator ==(CString const &lhs, CString_cadaptor const &rhs)
{
    return lhs == rhs.get_CString();
}
inline operator ==(CString_cadaptor const &lhs, LPCSTR rhs)
{
    return lhs.get_CString() == rhs;
}
inline operator ==(LPCSTR lhs, CString_cadaptor const &rhs)
{
    return lhs == rhs.get_CString();
}
inline operator ==(CString_cadaptor const &lhs, LPCWSTR rhs)
{
    return lhs.get_CString() == CString(rhs);
}
inline operator ==(LPCWSTR lhs, CString_cadaptor const &rhs)
{
    return CString(lhs) == rhs.get_CString();
}
inline operator ==(CString_cadaptor const &lhs, unsigned char const *rhs)
{
    return lhs.get_CString() == CString(rhs);
}
inline operator ==(unsigned char const *lhs, CString_cadaptor const &rhs)
{
    return CString(lhs) == rhs.get_CString();
}

inline operator ==(CString_iadaptor const &lhs, CString_iadaptor const &rhs)
{
    return lhs.get_CString() == rhs.get_CString();
}
inline operator ==(CString_iadaptor const &lhs, CString const &rhs)
{
    return lhs.get_CString() == rhs;
}
inline operator ==(CString const &lhs, CString_iadaptor const &rhs)
{
    return lhs == rhs.get_CString();
}
inline operator ==(CString_iadaptor const &lhs, LPCSTR rhs)
{
    return lhs.get_CString() == rhs;
}
inline operator ==(LPCSTR lhs, CString_iadaptor const &rhs)
{
    return lhs == rhs.get_CString();
}
inline operator ==(CString_iadaptor const &lhs, LPCWSTR rhs)
{
    return lhs.get_CString() == CString(rhs);
}
inline operator ==(LPCWSTR lhs, CString_iadaptor const &rhs)
{
    return CString(lhs) == rhs.get_CString();
}
inline operator ==(CString_iadaptor const &lhs, unsigned char const *rhs)
{
    return lhs.get_CString() == CString(rhs);
}
inline operator ==(unsigned char const *lhs, CString_iadaptor const &rhs)
{
    return CString(lhs) == rhs.get_CString();
}

inline operator ==(const_CString_iadaptor const &lhs, const_CString_iadaptor const &rhs)
{
    return lhs.get_CString() == rhs.get_CString();
}
inline operator ==(const_CString_iadaptor const &lhs, CString const &rhs)
{
    return lhs.get_CString() == rhs;
}
inline operator ==(CString const &lhs, const_CString_iadaptor const &rhs)
{
    return lhs == rhs.get_CString();
}
inline operator ==(const_CString_iadaptor const &lhs, LPCSTR rhs)
{
    return lhs.get_CString() == rhs;
}
inline operator ==(LPCSTR lhs, const_CString_iadaptor const &rhs)
{
    return lhs == rhs.get_CString();
}
inline operator ==(const_CString_iadaptor const &lhs, LPCWSTR rhs)
{
    return lhs.get_CString() == CString(rhs);
}
inline operator ==(LPCWSTR lhs, const_CString_iadaptor const &rhs)
{
    return CString(lhs) == rhs.get_CString();
}
inline operator ==(const_CString_iadaptor const &lhs, unsigned char const *rhs)
{
    return lhs.get_CString() == CString(rhs);
}
inline operator ==(unsigned char const *lhs, const_CString_iadaptor const &rhs)
{
    return CString(lhs) == rhs.get_CString();
}

// operator !=

inline operator !=(CString_cadaptor const &lhs, CString_cadaptor const &rhs)
{
    return lhs.get_CString() != rhs.get_CString();
}
inline operator !=(CString_cadaptor const &lhs, CString const &rhs)
{
    return lhs.get_CString() != rhs;
}
inline operator !=(CString const &lhs, CString_cadaptor const &rhs)
{
    return lhs != rhs.get_CString();
}
inline operator !=(CString_cadaptor const &lhs, LPCSTR rhs)
{
    return lhs.get_CString() != rhs;
}
inline operator !=(LPCSTR lhs, CString_cadaptor const &rhs)
{
    return lhs != rhs.get_CString();
}
inline operator !=(CString_cadaptor const &lhs, LPCWSTR rhs)
{
    return lhs.get_CString() != CString(rhs);
}
inline operator !=(LPCWSTR lhs, CString_cadaptor const &rhs)
{
    return CString(lhs) != rhs.get_CString();
}
inline operator !=(CString_cadaptor const &lhs, unsigned char const *rhs)
{
    return lhs.get_CString() != CString(rhs);
}
inline operator !=(unsigned char const *lhs, CString_cadaptor const &rhs)
{
    return CString(lhs) != rhs.get_CString();
}

inline operator !=(CString_iadaptor const &lhs, CString_iadaptor const &rhs)
{
    return lhs.get_CString() != rhs.get_CString();
}
inline operator !=(CString_iadaptor const &lhs, CString const &rhs)
{
    return lhs.get_CString() != rhs;
}
inline operator !=(CString const &lhs, CString_iadaptor const &rhs)
{
    return lhs != rhs.get_CString();
}
inline operator !=(CString_iadaptor const &lhs, LPCSTR rhs)
{
    return lhs.get_CString() != rhs;
}
inline operator !=(LPCSTR lhs, CString_iadaptor const &rhs)
{
    return lhs != rhs.get_CString();
}
inline operator !=(CString_iadaptor const &lhs, LPCWSTR rhs)
{
    return lhs.get_CString() != CString(rhs);
}
inline operator !=(LPCWSTR lhs, CString_iadaptor const &rhs)
{
    return CString(lhs) != rhs.get_CString();
}
inline operator !=(CString_iadaptor const &lhs, unsigned char const *rhs)
{
    return lhs.get_CString() != CString(rhs);
}
inline operator !=(unsigned char const *lhs, CString_iadaptor const &rhs)
{
    return CString(lhs) != rhs.get_CString();
}

inline operator !=(const_CString_iadaptor const &lhs, const_CString_iadaptor const &rhs)
{
    return lhs.get_CString() != rhs.get_CString();
}
inline operator !=(const_CString_iadaptor const &lhs, CString const &rhs)
{
    return lhs.get_CString() != rhs;
}
inline operator !=(CString const &lhs, const_CString_iadaptor const &rhs)
{
    return lhs != rhs.get_CString();
}
inline operator !=(const_CString_iadaptor const &lhs, LPCSTR rhs)
{
    return lhs.get_CString() != rhs;
}
inline operator !=(LPCSTR lhs, const_CString_iadaptor const &rhs)
{
    return lhs != rhs.get_CString();
}
inline operator !=(const_CString_iadaptor const &lhs, LPCWSTR rhs)
{
    return lhs.get_CString() != CString(rhs);
}
inline operator !=(LPCWSTR lhs, const_CString_iadaptor const &rhs)
{
    return CString(lhs) != rhs.get_CString();
}
inline operator !=(const_CString_iadaptor const &lhs, unsigned char const *rhs)
{
    return lhs.get_CString() != CString(rhs);
}
inline operator !=(unsigned char const *lhs, const_CString_iadaptor const &rhs)
{
    return CString(lhs) != rhs.get_CString();
}

// operator <

inline operator <(CString_cadaptor const &lhs, CString_cadaptor const &rhs)
{
    return lhs.get_CString() < rhs.get_CString();
}
inline operator <(CString_cadaptor const &lhs, CString const &rhs)
{
    return lhs.get_CString() < rhs;
}
inline operator <(CString const &lhs, CString_cadaptor const &rhs)
{
    return lhs < rhs.get_CString();
}
inline operator <(CString_cadaptor const &lhs, LPCSTR rhs)
{
    return lhs.get_CString() < rhs;
}
inline operator <(LPCSTR lhs, CString_cadaptor const &rhs)
{
    return lhs < rhs.get_CString();
}
inline operator <(CString_cadaptor const &lhs, LPCWSTR rhs)
{
    return lhs.get_CString() < CString(rhs);
}
inline operator <(LPCWSTR lhs, CString_cadaptor const &rhs)
{
    return CString(lhs) < rhs.get_CString();
}
inline operator <(CString_cadaptor const &lhs, unsigned char const *rhs)
{
    return lhs.get_CString() < CString(rhs);
}
inline operator <(unsigned char const *lhs, CString_cadaptor const &rhs)
{
    return CString(lhs) < rhs.get_CString();
}

inline operator <(CString_iadaptor const &lhs, CString_iadaptor const &rhs)
{
    return lhs.get_CString() < rhs.get_CString();
}
inline operator <(CString_iadaptor const &lhs, CString const &rhs)
{
    return lhs.get_CString() < rhs;
}
inline operator <(CString const &lhs, CString_iadaptor const &rhs)
{
    return lhs < rhs.get_CString();
}
inline operator <(CString_iadaptor const &lhs, LPCSTR rhs)
{
    return lhs.get_CString() < rhs;
}
inline operator <(LPCSTR lhs, CString_iadaptor const &rhs)
{
    return lhs < rhs.get_CString();
}
inline operator <(CString_iadaptor const &lhs, LPCWSTR rhs)
{
    return lhs.get_CString() < CString(rhs);
}
inline operator <(LPCWSTR lhs, CString_iadaptor const &rhs)
{
    return CString(lhs) < rhs.get_CString();
}
inline operator <(CString_iadaptor const &lhs, unsigned char const *rhs)
{
    return lhs.get_CString() < CString(rhs);
}

⌨️ 快捷键说明

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