MFC 消息映射中的函数地址

Function addresses in MFC message maps

本文关键字:函数 地址 消息 映射 MFC      更新时间:2023-10-16

为什么类向导生成的消息映射中的函数地址是用明确提及的类的名称编写的?

例如:

ON_BN_CLICKED(IDC_CHECK1, &CMyDlg::OnClickedSomeButton)

而不是:

ON_BN_CLICKED(IDC_CHECK1, &OnClickedSomeButton)

甚至:

ON_BN_CLICKED(IDC_CHECK1, OnClickedSomeButton)

所有三个变体都可以正确编译。

这只是好奇心。

所有三个变体都可以正确编译。

是的,它们编译正确...在 MSVC 上。如果您尝试在 Clang(Microsoft兼容模式(中编译第二个或第三个示例,则会出现错误。

ON_BN_CLICKED(IDC_CHECK1, &OnClickedSomeButton)

产量Clang : must explicitly qualify name of member function when taking its address

ON_BN_CLICKED(IDC_CHECK1, OnClickedSomeButton)

产量Clang : call to non-static member function without an object argument

即使您

不想发布 MSVC 编译的二进制文件以外的其他形式,坚持使用第一种形式肯定更好 - 您可能希望使用需要 clang 编译的 clang tidy 等工具。它也是传递成员函数指针的唯一C++符合标准的方法。另外两个通过Microsoft的扩展工作。