C++静态函数中调用非静态成员函数或变量

来源:互联网 发布:淘宝收评价的是真的吗 编辑:程序博客网 时间:2024/06/05 22:46

用static声明的函数是静态函数,在调用该函数时,不会将对象的引用传递给它,所以在static函数中不可访问非static的成员
但实际情况中,我们经常会需要在静态函数中使用非静态函数或变量。

如下代码中ThreadProc是静态函数,线程启动时会自动调用
在此函数中需使用非静态成员变量m_nMark ,此时不可以在ThreadProc中直接调用。

解决方法:先声明一个自己类型的静态变量m_staticSelf,然后对其进行this赋值,最后在静态函数中调用对应m_staticSefl中的函数或变量即可,其实就是间接的调用自己的函数或变量。

.h

class RecorderNative
{
private:
static RecorderNative* m_staticSelf;
int m_nMark;
public:
RecorderNative();
~RecorderNative();
private:
static DWORD WINAPI ThreadProc(LPVOID lpParam);
void Process( );
};

.cpp

RecorderNative* RecorderNative::m_staticSelf;
RecorderNative::RecorderNative()
{
m_staticSelf = this;
}

RecorderNative::~RecorderNative()
{

}

DWORD WINAPI RecorderNative::ThreadProc(LPVOID lpParam)
{
m_staticSelf->Process();
return 0;
}

void RecorderNative::Process( )
{
m_nMark = 1;
}

0 0
原创粉丝点击