C++静态成员函数访问非静态成员的几种方法
作者:网络转载 发布时间:[ 2015/2/2 11:11:12 ] 推荐标签:C++ 静态成员 函数
方法二:
其实这个方法在GLIB中用的很多,是放上全局变量地址即
A g_a;
class A
{
public:
static void test()
{
g_a.m_a += 1;
}
void hello()
{
}
private:
static int m_staticA;
int m_a
};
这种方法我们了解好,全局变量我们并不推荐。
方法三:
大家都知道静态成员函数不能访问非静态成员,但别忘了,他们可以访问静态成员,也是说,如果我们的这个类是个单例,我们完全可以在创建的时候把this指针赋值给那个静态成员,然后在静态成员函数内部可以放心大胆的使用了。
classA
{
public:
A()
{
m_gA=this;
}
staticvoidtest()
{
m_gA.m_a+=1;
}
voidhello()
{
}
private:
staticintm_staticA;
staticA*m_gA;
intm_a
};
方法四:
和方法一比较像,但他的方向思想更多的是针对内存块这个概念,意思是在静态函数的形参比加上一个void *的内存首地址,然后在内部做转换
class A
{
public:
static void test(void *pData)
{
A *a = (A *)pData;
a->m_a += 1;
}
void hello()
{
}
private:
static int m_staticA;
int m_a
};
A a;
test(&a);
如上,我整理了4种方法,当然方法还有很多,其实绕了这么大远路,我们的希望是不破坏回调函数整洁的函数接口(加上自己的实例指针)而做的妥协,如果你更喜欢通过改变接口或者通过用Java类似的interface方式来实现,那也没有问题,这里主要是提供给大家一个思路,C++确实很灵活,我们要用好这把双刃剑 : )
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11