![]() |
#2
死了都要C2012-02-08 21:14
|

#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;
}
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 编辑 ]