为什么在类向导生成的消息映射中的函数地址写有明确提到的类名?

例如:

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++ standard-conformant way。其他两个通过Microsoft的扩展来工作。

关于c++ - MFC消息映射中的函数地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48447974/

10-11 01:05