为什么在类向导生成的消息映射中的函数地址写有明确提到的类名?
例如:
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/