拿来最常见的例子:线程函数。
线程函数要么是全局函数,要是是类里的静态函数。
作为全局函数的时候破坏了类的封装
而作为类的静态函数的话,又必须把静态函数中用到的成员变量、函数都改为静态、、、
总的来说就是-----用之不爽!
有什么办法既不破坏类的封装又不因为静态函数使用大量静态变量和静态函数呢?
答案:使含有静态函数的类的实例作为全局变量出现(其实这样做还是用全局、、什么道理我也讲不清,管它呢~)
举个例子吧,我要在CMainFrame里加一个ThreadProc线程函数,
这样声明
static UINT ThreadProc(LPVOID pParam);//跟平常一样
这时在ThreadProc里调用CMainFrame里的非静态函数变量就不行了
比如:UINT CMainFrame::ThreadProc(LPVOID pParam)
{
this->m_szMember = pParam ; /*里会出错,说m_szMember不是静态变量不能调用,你将不得不把m_szMember设置为静态*/
return TRUE;
}
把CMainFrame设置为全局变量就不必了
比如,在xxxxapp.cpp中加入:
CMainFrame* pMainFrame;
在xxxxapp.h里加入extern CMainFrame* pMainFrame;
这样,你的ThreadProc可以这样写:
UINT CMainFrame::ThreadProc(LPVOID pParam)
{
pMainFrame->m_szMember = pParam ; /*m_szMember可以不是static形式了*/
return TRUE;
}