指向类成员函数的函数指针及#define typedef 实现类成员函数的类型转换

#include <iostream>
using namespace std;

class Test
{
public :
    void print()
    {
        cout << "abcd" << endl;;
    }

    double test()
    {
        cout << "double" << endl;
        return 2;
    }
};

typedef void (Test::* SEL_SHEDULE)();//定义函数指针类型 void(Test::*p)()

#define f(print) (SEL_SHEDULE)(&print);//把括号类的转化为SEL_SHEDULE类型

void main()
{
    Test a;
    void(Test::*ppp)() = &Test::print;
    (a.*ppp)();

    SEL_SHEDULE p;
    p = &(Test::print);
    (a.*p)();

    SEL_SHEDULE pp = f(Test::print);
    (a.*pp)();

    SEL_SHEDULE pppp = f(Test::test);
    (a.*pppp)();
    //这里不能使用cout << (a.*pppp)() 因为已经转化成void类型

    double (Test::*b)() = &Test::test;
    cout << (a.*b)() << endl;
    system("pause");
}

 

posted @ 2016-01-08 10:27  喵小喵~  阅读(468)  评论(0编辑  收藏  举报