Boost.MPLでWTLのマクロの削除を試みる

  • ソースはこちら
  • デバッグ時には、「全般→デバッグ情報の形式→行番号のみ(/Zd)、または無効」を選択しないとコンパイラがクラッシュすることがある
  • 使用法は以下のような感じになる(この例でプログラムサイズはマクロより2KBほど大きくなる)


[]struct[] []big_message_map[] : []boost[]::[]mpl[]::[]vector[]<
[]alt_msg_map[]< 0,
[]boost[]::[]mpl[]::[]vector[]<
[]message_handler[]<[]WM_CREATE[], &[]CMainFrame[]::[]OnCreate[]>,

[]command_range_handler[]<[]ID_VIEW_ICONS[], []ID_VIEW_LIST[], &[]CMainFrame[]::[]OnViewChange[]>,
[]command_range_handler[]<[]ID_VIEW_SORT_NAME[], []ID_VIEW_SORT_ATTR[], &[]CMainFrame[]::[]OnViewSort[]>,

[]command_id_handler[]<[]ID_COMBO_GO[], &[]CMainFrame[]::[]OnComboGo[]>,


[]command_id_handler[]<[]ID_VIEW_REFRESH[], &[]CMainFrame[]::[]OnViewRefresh[]>,
[]command_id_handler[]<[]ID_APP_EXIT[], &[]CMainFrame[]::[]OnFileExit[]>,
[]command_id_handler[]<[]ID_FILE_NEW[], &[]CMainFrame[]::[]OnFileNew[]>,
[]command_id_handler[]<[]ID_FILE_NEW_WINDOW[], &[]CMainFrame[]::[]OnFileNewWindow[]>,
[]command_id_handler[]<[]ID_VIEW_TOOLBAR[], &[]CMainFrame[]::[]OnViewToolBar[]>,
[]command_id_handler[]<[]ID_VIEW_ADDRESS_BAR[], &[]CMainFrame[]::[]OnViewAddressBar[]>,
[]command_id_handler[]<[]ID_VIEW_STATUS_BAR[], &[]CMainFrame[]::[]OnViewStatusBar[]>,
[]command_id_handler[]<[]ID_APP_ABOUT[], &[]CMainFrame[]::[]OnAppAbout[]>,

[]notify_code_handler[]<[]NM_RCLICK[], &[]CMainFrame[]::[]OnNMRClick[]>,
[]notify_code_handler[]<[]TVN_SELCHANGED[], &[]CMainFrame[]::[]OnTVSelChanged[]>,
[]notify_code_handler[]<[]TVN_ITEMEXPANDING[], &[]CMainFrame[]::[]OnTVItemExpanding[]>,
[]notify_code_handler[]<[]TVN_DELETEITEM[], &[]CMainFrame[]::[]OnTVDeleteItem[]>,
[]notify_code_handler[]<[]LVN_GETDISPINFO[], &[]CMainFrame[]::[]OnLVGetDispInfo[]>,
[]notify_code_handler[]<[]LVN_COLUMNCLICK[], &[]CMainFrame[]::[]OnLVColumnClick[]>,
[]notify_code_handler[]<[]LVN_DELETEITEM[], &[]CMainFrame[]::[]OnLVDeleteItem[]>,
[]notify_code_handler[]<[]NM_CLICK[], &[]CMainFrame[]::[]OnLVItemClick[]>,
[]notify_code_handler[]<[]NM_DBLCLK[], &[]CMainFrame[]::[]OnLVItemClick[]>,

[]msg_wm_close[]<&[]CMainFrame[]::[]OnDoNothing[]>,

[]chain_msg_map[]< []CUpdateUI[]<[]CMainFrame[]> >,
[]chain_msg_map[]< []CFrameWindowImpl[]<[]CMainFrame[]> >,
[]empty_handler[]
>
>,
[]alt_msg_map[]< 1,
[]boost[]::[]mpl[]::[]vector[]<
[]command_id_handler[]<[]ID_COMBO_GO[], &[]CMainFrame[]::[]OnComboGo[]>,
[]command_id_handler[]<[]ID_VIEW_REFRESH[], &[]CMainFrame[]::[]OnViewRefresh[]>,
[]command_id_handler[]<[]ID_APP_EXIT[], &[]CMainFrame[]::[]OnFileExit[]>,
[]command_id_handler[]<[]ID_FILE_NEW[], &[]CMainFrame[]::[]OnFileNew[]>,
[]command_id_handler[]<[]ID_FILE_NEW_WINDOW[], &[]CMainFrame[]::[]OnFileNewWindow[]>,
[]command_id_handler[]<[]ID_VIEW_TOOLBAR[], &[]CMainFrame[]::[]OnViewToolBar[]>,
[]command_id_handler[]<[]ID_VIEW_ADDRESS_BAR[], &[]CMainFrame[]::[]OnViewAddressBar[]>,
[]command_id_handler[]<[]ID_VIEW_STATUS_BAR[], &[]CMainFrame[]::[]OnViewStatusBar[]>,
[]command_id_handler[]<[]ID_APP_ABOUT[], &[]CMainFrame[]::[]OnAppAbout[]>,
[]empty_handler[]
>
>,
[]alt_msg_map[]< 0,
[]boost[]::[]mpl[]::[]vector[]<
[]command_id_handler[]<[]ID_COMBO_GO[], &[]CMainFrame[]::[]OnComboGo[]>,
[]command_id_handler[]<[]ID_VIEW_REFRESH[], &[]CMainFrame[]::[]OnViewRefresh[]>,
[]command_id_handler[]<[]ID_APP_EXIT[], &[]CMainFrame[]::[]OnFileExit[]>,
[]command_id_handler[]<[]ID_FILE_NEW[], &[]CMainFrame[]::[]OnFileNew[]>,
[]command_id_handler[]<[]ID_FILE_NEW_WINDOW[], &[]CMainFrame[]::[]OnFileNewWindow[]>,
[]command_id_handler[]<[]ID_VIEW_TOOLBAR[], &[]CMainFrame[]::[]OnViewToolBar[]>,
[]command_id_handler[]<[]ID_VIEW_ADDRESS_BAR[], &[]CMainFrame[]::[]OnViewAddressBar[]>,
[]command_id_handler[]<[]ID_VIEW_STATUS_BAR[], &[]CMainFrame[]::[]OnViewStatusBar[]>,
[]command_id_handler[]<[]ID_APP_ABOUT[], &[]CMainFrame[]::[]OnAppAbout[]>,
[]empty_handler[]
>
>
> { };

[]// Overrides[]
[]BOOL[] []ProcessWindowMessage[]([]HWND[] []hWnd[], []UINT[] []uMsg[], []WPARAM[] []wParam[], []LPARAM[] []lParam[],
[]LRESULT[]& []lResult[], []DWORD[] []dwMsgMapID[] = 0)
{
[]return[] []process_window_message[]<[]big_message_map[]>([]hWnd[], []uMsg[], []wParam[], []lParam[], []lResult[], []dwMsgMapID[]);
}