Я неправильно прочитал ваш вопрос и ответил, когда уместно использовать статические функции.
Вы имели в виду статические функции-члены. вот пример, когда использовать статическую функцию-член - обернуть вызов потоков внутри класса, так что ваш поток имеет доступ к классу ...:
static unsigned WINAPI ArchiveAgent::LogMsgPump(PVOID pData)
{
ArchiveAgent* pSmith = reinterpret_cast<ArchiveAgent*>(pData);
if(pSmith)
pSmith->LogMsgPump();
else
return -1;
return 0;
}
unsigned WINAPI ArchiveAgent::LogMsgPump()
{
CoInitializeEx(NULL, COINIT_MULTITHREADED);
// ....
CoUninitialize();
return 0;
}
Здесь был мой ответ на простые старые статические функции .. Я использую статические функции, когда для этой функции не имеет смысла принадлежать классу.
Обычно я обычно добавляю эти функции в собственное пространство имен. Следующая статическая выборочная функция является частью пространства имен я называю ShellUtils:
static HRESULT CreateFolder(CString & sPath)
{
// create the destination folder if it doesn't already exist
HRESULT hr = S_OK;
DWORD dwError = 0;
if(sPath.GetLength() == 0 || sPath.GetLength() < 2)
return E_UNEXPECTED;
if(GetFileAttributes((LPCWSTR) sPath) == INVALID_FILE_ATTRIBUTES)
{
dwError = SHCreateDirectoryEx(NULL, (LPCWSTR)sPath, NULL);
if (dwError != ERROR_SUCCESS && dwError != ERROR_FILE_EXISTS && dwError != ERROR_ALREADY_EXISTS)
hr = HRESULT_FROM_WIN32(dwError);
}
return hr;
}
Что с тегом 'oops'? – Maxpm
Я отредактировал вопрос, так как я думаю, что автор просто означает «ООП» или Object-Orientated-Programming. –
http://stackoverflow.com/questions/4723143/c-static-member-functions – Mahesh