myStruct头文件 myStruct.h
class CMyClass;
struct
{
int nFlag;
void (CMyClass::*myinit)(int n);
void (CMyClass::*myopen)(int n,void* arg);
void (CMyClass::*myclose)(int);
...
}myStruct;
CMyClass头文件
class CMyClass
{
//构造 析构等
...
//成员变量
myStruct myStr;
// 成员函数1
void myClassInit()
void myinit(int n);
void myopen(int n,void* arg);
void myclose(int n);
};
CMyClass实现 cpp文件
...
void CMyClass::myClassInit()
{
struct myStruct myStr1 =
{
0,
this->myinit;
this->myopen;
this->myclose;
...
};
memcpy(&myStr,&myStr1 ,sizeof(myStruct ));
}
...后面会频繁用用myStr变量调用该结构体变量里面的函数
这样写法用VC6可以编译通过,也可以运行;
还有一种写法,如下:
myStruct头文件 myStruct.h
struct
{
int nFlag;
void (*myinit)(void* pObj,int n);
void (*myopen)(void* pObj,int n,void* arg);
void (*myclose)(void* pObj,int);
...
}myStruct;
CMyClass头文件
class CMyClass
{
//构造 析构等
...
//成员变量
myStruct myStr;
// 成员函数1
void myClassInit()
static void myinit(void* pObj,int n);
static void myopen(void* pObj,int n,void* arg);
static void myclose(void* pObj,int n);
};
//参数中的void* pObj用来传递CMyClass对象实例的指针,以便调用其他的非静态成员
CMyClass实现 cpp文件
...
void CMyClass::myClassInit()
{
struct myStruct myStr1 =
{
0,
this->myinit;
this->myopen;
this->myclose;
...
};
memcpy(&myStr,&myStr1 ,sizeof(myStruct ));
class CMyClass;
struct
{
int nFlag;
void (CMyClass::*myinit)(int n);
void (CMyClass::*myopen)(int n,void* arg);
void (CMyClass::*myclose)(int);
...
}myStruct;
CMyClass头文件
class CMyClass
{
//构造 析构等
...
//成员变量
myStruct myStr;
// 成员函数1
void myClassInit()
void myinit(int n);
void myopen(int n,void* arg);
void myclose(int n);
};
CMyClass实现 cpp文件
...
void CMyClass::myClassInit()
{
struct myStruct myStr1 =
{
0,
this->myinit;
this->myopen;
this->myclose;
...
};
memcpy(&myStr,&myStr1 ,sizeof(myStruct ));
}
...后面会频繁用用myStr变量调用该结构体变量里面的函数
这样写法用VC6可以编译通过,也可以运行;
还有一种写法,如下:
myStruct头文件 myStruct.h
struct
{
int nFlag;
void (*myinit)(void* pObj,int n);
void (*myopen)(void* pObj,int n,void* arg);
void (*myclose)(void* pObj,int);
...
}myStruct;
CMyClass头文件
class CMyClass
{
//构造 析构等
...
//成员变量
myStruct myStr;
// 成员函数1
void myClassInit()
static void myinit(void* pObj,int n);
static void myopen(void* pObj,int n,void* arg);
static void myclose(void* pObj,int n);
};
//参数中的void* pObj用来传递CMyClass对象实例的指针,以便调用其他的非静态成员
CMyClass实现 cpp文件
...
void CMyClass::myClassInit()
{
struct myStruct myStr1 =
{
0,
this->myinit;
this->myopen;
this->myclose;
...
};
memcpy(&myStr,&myStr1 ,sizeof(myStruct ));
}
第一种写法传不是指向静态函数,是指向类普通成员的函数。在使用是必须有CMyClass对象调用的
obj.(myStr.func)(参数): .(myStr.func)相当于指向类普通成员的函数指针,必须有对象!
而第2种写法这样用:CMyClass::myStr.func)(参数)
第一种方式传递给变量myStr的函数指针为非静态函数,由于函数中隐含了this,所以函数能够根据this指针区分出不同的对象。
第二种方式的为静态函数,但是你显示的指定了this即void *pObj,使得静态函数仍然能够区分出不同的类对象。
综上这两种方式在多个CMyClass对象情况下,不会有冲突,因为你已经通过this指针或者void *pObj指定了不同的对象。