_ATL_ENABLE_PTM_WARNING
更新 : 2007 年 11 月
このマクロは、メンバ関数へのポインタに対して ANSI C++ 標準に準拠する構文を使用するために定義します。このマクロを使用して、標準以外の構文でメンバ関数へのポインタを初期化すると、C4867 コンパイル エラーが生成されます。
#define _ATL_ENABLE_PTM_WARNING
解説
ATL ライブラリおよび MFC ライブラリは、Visual C++ コンパイラの C++ 標準への準拠が強化されたことに伴って変更されました。ANSI C++ 標準に従って、クラス メンバ関数へのポインタの構文には &CMyClass::MyFunc を指定する必要があります。
_ATL_ENABLE_PTM_WARNING が定義されていない場合 (既定)、ATL または MFC は、マクロ マップ (特にメッセージ マップ) の C4867 エラーを無効にして、レガシ コードでのビルドを以前のように継続できるようにします。_ATL_ENABLE_PTM_WARNING を定義する場合、コードは C++ 標準に準拠する必要があります。
ただし、標準以外のフォームが使用されなくなったため、既存のコードを C++ 標準に準拠した構文に移行する必要があります。たとえば、次のようなコードがあります。
BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
ON_COMMAND(ID_MYCOMMAND, OnMycommand)
END_MESSAGE_MAP()
このコードは、次のように変更する必要があります。
BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
ON_COMMAND(ID_MYCOMMAND, &CMFCListViewDoc::OnMycommand)
END_MESSAGE_MAP()
"&" 文字を追加するマップ マクロの場合は、この文字を再度コードに追加する必要があることに注意してください。