gpt4 book ai didi

c++ - 来自::命名空间的 MFC 函数?

转载 作者:行者123 更新时间:2023-12-01 15:05:23 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





scope resolution operator without a scope

(6 个回答)


2年前关闭。




不久前我开始使用 MFC,我遇到了在函数名称前使用“::”调用的函数或方法。它是什么?

例如:

::SendMessage()

那个范围是什么?如果我想如何定义一个?

谢谢

最佳答案

::在函数名指定使用来自 的函数之前全局命名空间 而不是特定类的成员函数。正如您所发现的,这在 MFC 中被广泛使用。标题/来源。

原因其实很简单。让我们考虑 CWnd类,它有一个 SendMessage具有以下签名的成员函数:

class CWnd : public CObject {
//...
LRESULT SendMessage(UINT msg, WPARAM wParam, LPARAM lParam);
//...
}

该函数的实现可以简单地将控制权传递给非 MFC 的、具有相同名称的全局 WinAPI 函数。但这有一个不同的签名:

LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);

所以,当成员函数调用这个非 MFC 对象时,第一个参数是它的“自己的” HWND对象, ::前缀用于向任何 future 的编码人员明确正在调用非 MFC 函数:

LRESULT CWnd::SendMessage(UINT msg, WPARAM wParam, LPARAM lParam)
{
return ::SendMessage(m_hWnd, msg, wParam, lParam); // Clarifies that we're using a non-class function.
}

随时要求进一步的解释和/或澄清。

关于c++ - 来自::命名空间的 MFC 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59271354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com