怎么实现通过函数指针“调用”类的成员函数,一个关于类的设计有关问题

如何实现通过函数指针“调用”类的成员函数,一个关于类的设计问题
有一个类
class   demo
{
    fun()
    {
        ...
        fun1();
        ...
        fun2();
        ...
    }
    fun1()
    {
        ...
        fun11();
        ...
        fun12();
        ...
    }
    fun2()
    {
        ...
        fun21();
        ...
        fun22();
        ...
    }
    fun11();
    fun12();
    fun21();
    fun22();
};

函数fun,   fun1,   fun2中的代码除了调用子函数那行以外,全部一样。
于是我想能否用一个统一的通用函数代替其中的代码,用函数指针作为参数,大概如下
demo::comm_fun(void   (*   pfun1)(void),   void   (*   pfun2)(void))
{
    ...
    pfun1();
    ...
    pfun2();
    ...
}

则fun修改为
demo::fun()
{
    comm_fun(fun1,   fun2);
}

可惜的是类的成员函数不能使用函数指针传递,那么如果想实现类似的功能,该如何做?

第一种方案:使用helper函数
我的一个办法是给每一个子函数加入一个helper函数,如对应成员函数fun1,   fun2,则有普通函数
fun1(demo   *   d)
{
    d-> fun2();  
}

fun2(demo   *   d)
{
    d-> fun2();
}

comm_fun修改为
demo::comm_fun(void   (*   pfun1)(demo   *   d),   void   (*   pfun2)(demo   *   d))
{
    ...
    pfun1(this);
    ...
    pfun2(this);
    ...
}

fun修改为
demo::fun()
{
    comm_fun(::fun1,   ::fun2);   //注意调用的是helper,而不是成员函数
}
这个方法虽然能够达到要求,但是每个需要用函数指针传递的成员函数,都需要有个对应的helper,实现起来有些麻烦。


第二种方案:使用宏
写一个宏
#define   comm_fun(pfun1,   pfun2)
    ...\
    pfun1(this);\
    ...\
    pfun2(this);\
    ...

这样就避免了使用helper函数,但是不是太安全,理论上他只是函数中实现代码,而不是一个真正的函数。

还有没有更好的实现方案呢?

------解决方案--------------------
用指向成员的指针。
------解决方案--------------------
可以这样
comm_fun(demo* obj,void (* pfun1)(), void (* pfun2)())
{
...
obj-> *pfun1();
...
obj-> *pfun2()
}
------解决方案--------------------
或者用静态成员函数- -
------解决方案--------------------
使用指向类的成员函数的指针,

如:
class A
{
public:
void fun1();
};
void A::fun1()
{
}


使用时:
void (A::*p)()=A::fun1; //p指向了类的成员函数fun1
调用时必须用对象或指向对象的指针来调用
如:
A a;
a.p(); //调用a.fun1()


按这个思路试试能不能完成你的想法吧
------解决方案--------------------
楼上为正解,不过这对于函数本身的类型会有限制,不能实现绝对意义上的通用。

------解决方案--------------------
所有的编译器,都提供了符合C++标准明确要求的行为的类成员函数指针,没有兼容性问题。