C++ 类内函数成员的参数为本类指针问题例如:class CA{public:CA()~CA()public:fun(CA * pc)//像这样的
C++ 类内函数成员的参数为本类指针问题
例如:
class CA
{
public:
CA();
~CA();
public:
fun(CA * pc); //像这样的函数 参数为本类指针的 用的时候有没有特别需要注意的地方???
}
[最优解释]
#include <iostream>
using namespace std;
class A
{
public:
void func()
{
cout<<"Happy Ending!"<<endl;
}
};
template <class RETURN,class CLASS>
union ChangeFunc
{
RETURN ( CLASS::*pMemFunc)();
RETURN (*pGlobFunc)(void *);
};
int main()
{
ChangeFunc<void,A> test;
A object;
test.pMemFunc=&A::func;
(*test.pGlobFunc)(&object);
return 0;
}
代码,自己看一下。
[其他解释]fun(CA * pc);
先要 if (pc != NULL)
或 assert(pc)
或fun(const CA& c)
或fun(CA& c)
[其他解释]因为类成员函数和非类成员函数调用约定不同,_thiscall与_stdcall的区别.
方法:
1,函数是全局的,声明为类的友元来访问类成员。
2,函数是类的static方法.
[其他解释]回调函数是有一定格式的.如果放在类里面,把他弄成static函数.因为普通类函数前面都有this指针这个隐藏参数.
[其他解释]直接用Union转化成员函数为普通函数也可以,没尝试,方法给你:
union { // 联合类,用于转换类成员方法指针到普通函数指针(试过编译器不允许在这两种函数之间强制转换),不知道有没有更好的方法。
void (_USERENTRY *ThreadProc)(void *);
void (_USERENTRY TMyClass::*MemberProc)();
} Proc; // 尽管联合里的两种函数类型现在看起来有很大不网址:http://www.cppblog.com/richardhe/articles/56822.html
[其他解释]这个可以但是不通用。
可以这样:
template<typename DST,typename SRC>
DST getType(SRC src)
{
union
{
DST dst;
SRC src;
}un_type;
un_type.src = src;
return un_type.dst;
}
用的时候
class A
{
public:
void F() { printf("Hello"); };
};
typedef void (*pfnF)(void);
pfnF fun = gettype(&A::F);
[其他解释]个人感觉没什么特别的,只是两个对象的事么..
[其他解释]没什么特别的.重载赋值操作符也是关于自己类的对象啊.
[其他解释] 当变通函数使用就好
[其他解释]可以直接使用,一般类的成员函数都有个this 指针,指向对象本身。
但是作为拷贝构造函数,又不想。。。
[其他解释]我觉得没什么不同的 有点像拷贝构造函数
[其他解释]没啥大不了的,往里传了一个指针而已
[其他解释]在线等
~~~
[其他解释]google 友元
[其他解释]忒丑了!
[其他解释]头像网址弄不开
[其他解释]泥也太没欣赏水平了~~~
---------------------
谢谢大家了 我还有个问题
控制台程序 用SetTimer函数的时候 需要自己接收消息 参数4为函数地址
格式是回调函数 我怎么才能把回调函数写在类内呢????
例如:
SetTimer(NULL,1,1000,MyTimer);
void callback MyTimer(HWND,......) 我想把这个函数写在类内 但是编译不过去 他不让
{
………………………………
}
为什么?怎么解决? 谢谢大家了 我会加分的。。。。。可以看我结贴率。
[其他解释]如果类内是static 的话
SetTimer()这个函数报错了 第4个参数不对 而且我如果要在这个回调函数里用 类内成员变量的话也用不了啊?我新手 求帮忙 谢谢了
[其他解释]如果类内是static 的话
SetTimer()这个函数报错了 第4个参数不对 而且我如果要在这个回调函数里用 类内成员变量的话也用不了啊?我新手 求帮忙 谢谢了
[其他解释]该回复于2011-01-24 17:31:29被版主删除
[其他解释]楼上两位高手,我菜鸟啊 看不懂模版 容器什么的啊。。。。
[其他解释]fun(CA * pc);
pc指针可以使用私有变量,默认是友元