为什么类向导生成的消息映射中的函数地址是用明确提到的类名写的?
例如:
ON_BN_CLICKED(IDC_CHECK1, &CMyDlg::OnClickedSomeButton)
而不是:
ON_BN_CLICKED(IDC_CHECK1, &OnClickedSomeButton)
甚至:
ON_BN_CLICKED(IDC_CHECK1, OnClickedSomeButton)
所有三种变体都可以正确编译。
只是好奇心。
答案 0 :(得分:2)
所有三个变体都能正确编译。
是的,它们可以在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++ standard-conformant way。其他两个通过Microsoft的扩展来工作。