来自 :: 命名空间的 MFC 函数?
MFC Functions from :: namespace?
我不久前开始使用 MFC,我遇到了函数或方法,它们在函数名称之前用“::”调用。这是什么?
例如:
::SendMessage()
那个范围是什么?如果我想,我该如何定义?
谢谢
::
指的是 global 命名空间。
::SendMessage()
表示在全局命名空间中可用的方法。它不受任何特定范围的限制 class。
函数名称前的 ::
指定使用来自 全局命名空间 的函数,而不是特定 class 的成员函数。正如您所发现的,这在 MFC
headers/source.
中被广泛使用
其实原因很简单。让我们考虑 CWnd
class,它有一个带有以下签名的 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对象时,第一个参数是它的'own'HWND
对象,::
前缀用于向任何未来的编码人员表明正在调用非 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.
}
随时要求进一步解释and/or澄清。
我不久前开始使用 MFC,我遇到了函数或方法,它们在函数名称之前用“::”调用。这是什么?
例如:
::SendMessage()
那个范围是什么?如果我想,我该如何定义?
谢谢
::
指的是 global 命名空间。
::SendMessage()
表示在全局命名空间中可用的方法。它不受任何特定范围的限制 class。
函数名称前的 ::
指定使用来自 全局命名空间 的函数,而不是特定 class 的成员函数。正如您所发现的,这在 MFC
headers/source.
其实原因很简单。让我们考虑 CWnd
class,它有一个带有以下签名的 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对象时,第一个参数是它的'own'HWND
对象,::
前缀用于向任何未来的编码人员表明正在调用非 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.
}
随时要求进一步解释and/or澄清。