作者QQ29 (我爱阿蓉)
看板C_and_CPP
标题Re: [问题] 求助 class 内的function pointer用法
时间Wed Sep 2 23:05:17 2009
我随意的写了一个程式
变数都乱曲的笑笑就好
#include <iostream>
using namespace std;
class A;
typedef void(A::*PTR)(int,int);
class A
{
public:
A(){}
void QQ(int a,int b){cout<<a<<b;}
void XD( PTR P){ (this->*P)(5,6);}
void DO()
{
XD(&A::QQ);
}
};
int main()
{
A T;
T.DO();
return 0;
}
这样是可以run的 是不是你想要的??
有错请各位多指教
ps.有谁知道我写this->这个 为啥不写会错= = 我想不透
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.207.187
※ 编辑: QQ29 来自: 140.113.207.187 (09/02 23:06)
1F:推 kkroy:是的,这就是我要的! 很谢谢你! 09/02 23:10
2F:推 kkroy:不过我有个问题,为什麽要用typedef void(A::*PTR)(int,int) 09/02 23:31
3F:→ kkroy:可以在void XD( void (*qq)(int,int) ){ (this->*qq)(5,6);} 09/02 23:33
4F:→ kkroy:这样会错~不过我不知道错在哪.... 09/02 23:34
5F:→ tinlans:重点是 A::* 这个东西要写出来。 09/02 23:38
6F:→ tinlans:member function pointer 跟一般 fp 不是一样的东西。 09/02 23:39
7F:→ tinlans:文末的问题,是 this ->* P 这样拆开来看,->* 是运算子。 09/02 23:42
8F:→ tinlans:比较常见的参数列是 (A *obj, PTR P) 或 (A &obj, PTR P) 09/02 23:43
9F:→ tinlans:然後用 obj.*P 或 obj->*P 去 invoke。 09/02 23:44
10F:→ QQ29:那这样要T.DO(&T);这样写噜? 09/02 23:50
11F:推 kkroy:那如果不用typedef void(A::*PTR)(int,int);该怎改写? 09/02 23:58
12F:→ QQ29:t大有说了 A::* 你*qq要改成A::*qq 09/03 00:15
13F:→ kkroy:是的,我等会试试看,我想我需要消化一下。 09/03 00:27
14F:推 kkroy:真的耶! 如果不用typedef void (A::*PTR)(int,int); 09/03 00:29
15F:→ kkroy:将void XD( PTR P ){ (this->*P)(5,6);} 09/03 00:30
16F:→ kkroy:改成 void XD( void (A::*qq)(int,int) ){ (this->*qq)(5,6) 09/03 00:30
17F:→ kkroy:效果一样! 为什麽要A::*呢? 09/03 00:31
18F:→ kkroy:定义中又为什麽要 this->* 呢? 09/03 00:31