方法二:
  其实这个方法在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++确实很灵活,我们要用好这把双刃剑 : )