如何将一个普通函数强制转换成类成员函数
是不是不可能阿? 问题点数:0、回复次数:18Top
1 楼lemon520(喷血)回复于 2004-08-03 10:12:42 得分 0
好象不可能吧!
只有把代码拷到类成员函数里面................. :(Top
2 楼geesun(还是Geesun!)回复于 2004-08-03 10:36:17 得分 0
#include<iostream>
using namespace std;
typedef int (*Func)();
class a
{
public:
static int z ;
static int func()
{
z = 100;
//x =100;
};
Func testf;
};
int a::z =0;
int testfunc()
{
cout << "asdfasdf"<<endl;
}
int main()
{
a test;
test.testf = &testfunc;
test.testf();
}
不知道这样能不能满足搂主的意思!Top
3 楼rwdx(忆)回复于 2004-08-03 10:58:37 得分 0
c++不支持委托或者事件Top
4 楼kaphoon(齐柏林飞艇)回复于 2004-08-03 11:20:12 得分 0
geesun(还是Geesun!) 兄:老是 写test.testf = &testfunc;,我觉得这个'&',不需要写,因为testfunc本来就是个地址了(函数首地址),或者说是函数指针~
Top
5 楼RookieStar(Yukon)回复于 2004-08-03 11:25:39 得分 0
同意飞艇的。Top
6 楼lovelyhawk(小鹰)回复于 2004-08-03 12:47:03 得分 0
我的意思是:
class A;
int fun();
typedef int (A::*PFUN)();
PFUN p = (PFUN)(&fun);
为啥不行
Top
7 楼RookieStar(Yukon)回复于 2004-08-03 13:03:13 得分 0
语法问题:
typedef int (*A::PFUN)();Top
8 楼mybaby999(如水江南)回复于 2004-08-03 13:46:15 得分 0
大象阿,不要误人子弟啊
像这样的方法可以实现,但是你最应该告诉他的是,不要这样编程Top
9 楼lkjx82(风化血)回复于 2004-08-03 14:44:57 得分 0
为什么会有这种需求呢?
Top
10 楼darkstar21cn(≮天残≯无畏)(死亡进行时)回复于 2004-08-03 15:19:57 得分 0
谢谢,飞艇兄,我一直使用这个&,不知道能够不用。现在知道了,看样子我还是重新学起算了。Top
11 楼rockhard(不签名)回复于 2004-08-03 17:32:22 得分 0
试了下,好象真的没办法。或许与成员函数有个隐含的 this指针有点关。Top
12 楼geesun(还是Geesun!)回复于 2004-08-03 17:38:17 得分 0
kaphoon(齐柏林飞艇)
test.testf = &testfunc 里面的&是不能少的!这样才能是取地址!(在我的编译器里尼那样通不过的)
呵呵~~
kaphoon(齐柏林飞艇) 能交个朋友吗?
我上海的,刚刚工作一年~~你呢?
Top
13 楼geesun(还是Geesun!)回复于 2004-08-03 17:41:02 得分 0
class A
{
public:
int index;
void update(int i)
{
cout<<index<<" "<<i<<endl;
}
};
int main()
{
typedef void (A::*FUNC)(int i);
FUNC func = &A::update;
//FUNC func = A::update;//我这里通不过
A a;
(a.*func)(1);
return 0;
}Top
14 楼geesun(还是Geesun!)回复于 2004-08-03 17:43:51 得分 0
#include<iostream>
using namespace std;
typedef int (*Func)();
class a
{
public:
static int z ;
static int func()
{
z = 100;
//x =100;
};
Func testf;
};
int a::z =0;
int testfunc()
{
cout << "asdfasdf"<<endl;
}
int main()
{
a test;
test.testf = testfunc;//这个能通过
test.testf();
}
kaphoon(齐柏林飞艇) 解释一下啥!谢谢!Top
15 楼whyglinux(山青水秀)回复于 2004-08-03 17:48:05 得分 0
>> 我的意思是:
>> class A;
>> int fun();
>> typedef int (A::*PFUN)();
>> PFUN p = (PFUN)(&fun);
>> 为啥不行
为什么要给自己找麻烦呢?在类中你可以直接调用全局函数,何必进行转换呢?就因为完全没有这个必要,所以C++标准规定这种转换为非法,强制转换也不行。Top
16 楼peter9606( 荷尔蒙一失效 人就清醒了)回复于 2004-08-03 17:52:35 得分 0
mark~Top
17 楼langzi8818(┤天道酬勤┝爱老婆┦┷我是来学习滴┷)回复于 2004-08-03 18:10:24 得分 0
MARK~~~Top
18 楼wxy_8191(菜鸟想往高处飞)回复于 2004-08-03 19:03:51 得分 0
学习~Top




