C++静态函数中调用非静态成员函数或变量
2016-10-21 16:29
441 查看
用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;
}
但实际情况中,我们经常会需要在静态函数中使用非静态函数或变量。
如下代码中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;
}
相关文章推荐
- C++静态函数中调用非静态成员函数或变量
- C++静态函数中调用非静态成员函数或变量
- c++中静态成员变量 静态成员函数 全局变量与静态函数的关系 字符串中括号的匹配编程 (笔试经历)
- C++ 成员函数成员变量 静态成员函数和变量
- C++程序运行时内存布局之----------简单类实例,成员变量,成员函数,静态成员变量,静态成员函数
- C++ 静态数据成员 成员函数 静态变量 全局变量(2)
- C++[类设计]静态窗口过程调用非静态成员函数
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- C++静态成员(变量与函数)很容易理解哦!
- 静态成员函数不能调用普通成员变量
- 【C++基础学习】关于C++静态成员函数和变量
- C++中静态成员函数访问成员变量问题
- C++基础(二)C/C++中的静态、非静态成员函数、变量
- C++静态成员函数和变量
- C++静态成员函数不能调用非静态成员变量
- 在c++中,静态数据成员可以被非静态成员函数调用吗?如果可以调用的话那为什么还要定义静态成员函数呢
- C++程序运行时内存布局之----------简单类实例,成员变量,成员函数,静态成员变量,静态成员函数
- C++中静态成员函数访问成员变量问题
- 类中静态成员函数调用成员变量的发法(单件模式)
- C++中静态成员函数访问成员变量问题