constポインタについて




RECT(矩形をあらわす構造体)へのポインタは、RECT*ですが、RECT*はLPRECTという型がtypedefされているので、こちらを使います。

同様に、SIZEのポインタは、LPSIZE ですし、POINTのポインタはLPPOINTです。

ところで、それらのポインタの指す内容を書き換えないことを保証したいことがあります。たとえば、次のようにconstメソッド内で、メンバを渡す場合です。

枠-1
    void    ConstMethod() const {
        foo(&m_rcMyRect);
    }
    RECT m_rcMyRect;


このConstMethodのなかでは、thisはconstなので、メンバであるm_rcMyRectもconstであり、&m_rcMyRectの型は、const RECT*となります。すなわち、fooは、引数にRECT*ではなく、const RECT*を取らなければなりません。

MFCのヘッダでは、const RECT*としてLPCRECTというのがtypedefされているのですが、Windowsのヘッダのなかには存在しないので、yaneSDK3rdでは、stdafx.hのなかで、次の3つをtypedefしています。

list-1
typedef const RECT* LPCRECT;
typedef const POINT* LPCPOINT;
typedef const SIZE* LPCSIZE;


つまり、LPCRECTを引数として取るメソッドは、このRECTポインタの指している構造体の内容を破壊しないことを保証します。以下、LPCPOINT,LPCSIZEについても同様です。