注册 登录
编程论坛 C++教室

有种函数指针不会定义,求教

死了都要C 发布于 2012-02-08 21:12, 804 次点击
程序代码:
#include <iostream>

class X
{
   
public:
    void f1(){}

    static void f2(){}
};

void f2(){}

int main()
{
    //普通的函数指针技能指向一般的函数,也能指向某个类的静态函数
    void (*p1)() = f2;
    void (*p2)() = X::f2;

    //对一般函数和某个类的静态函数的调用和对一般的函数调用是一样的,都是全局的
    p1();
    p2();

    //我现在想定义一种只能指向  某个类的静态函数  的指针,但是不能指向一般的全局函数
   
//但是出错
   
//void (* X::p3)() = f2;     //error C2039: “p3”: 不是“X”的成员
   
//void (* X::p4)() = X::f2;  //error C2039: “p4”: 不是“X”的成员

   
//这样定义的话,出错误, 无法指向一般全局函数
   
//void (X:: *p5)() = f2;
   
//error C2440: “初始化”: 无法从“void (__cdecl *)(void)”转换为“void (__thiscall X::* )(void)”

   
//这样定义的话,出错误, 无法指向某个类的静态函数
   
//void (X:: *p6)() = X::f2;
   
//error C2440: “初始化”: 无法从“void (__cdecl *)(void)”转换为“void (__thiscall X::* )(void)”

   
//这样定义的话,语法错误, 用于指向向某个类的非静态函数
   
//void (X:: *p7)() = X::f1;
   
//error C3867: “X::f1”: 函数调用缺少参数列表;请使用“&X::f1”创建指向成员的指针

   
//这样定义的话,能通过, 用于指向向某个类的非静态函数
    void (X:: *p7)() = &X::f1;

    //但是调用出错, 我知道有个this指针的问题
   
//p7();
   
//error C2064: 项不会计算为接受 0 个参数的函数

   
//这样才可以,但是还是没有实现我想做的。
    X xx;
    (&xx->* p7)();
   
         
    system("pause");
    return 0;
}


请问  怎么定义 : 一种只能指向  某个类的静态函数  的指针,但是不能指向一般的全局函数






[ 本帖最后由 死了都要C 于 2012-2-8 21:13 编辑 ]
3 回复
#2
死了都要C2012-02-08 21:14
忘了说 VC2005编译的
#3
rjsp2012-02-09 08:18
请问  怎么定义 : 一种只能指向  某个类的静态函数  的指针,但是不能指向一般的全局函数
------ 没有办法,因为 普通函数 和 类静态函数 是同一种类型
#4
bulgasari2012-02-09 14:26
我一点都没看通我擦...完全新鸟一个...
1