C++成员函数指针的使用方法
来源:互联网 发布:ipadmini安装不了软件 编辑:程序博客网 时间:2024/06/04 00:54
C++成员函数指针(pointer to member function)的用法和C语言的函数指针有些相似.
下面的代码说明了成员函数指针的一般用法:
class ClassName {public: int foo(int); }
int (ClassName::*pmf)(int) = &ClassNmae::foo;
ClassName c; //.*的用法,经由对象调用
(c.*pmf)(5); // A
ClassName *pc = &c; //->*的用法,经由对象指针调用
(Pc->*pmf)(6); // B
使用typedef可以让代码变得略微好看一点:
typedef int (ClassName::*PMF)(int);
PMF pmf = &ClassName::foo;
注意获取一个成员函数指针的语法要求很严格:
1) 不能使用括号:例如&(ClassName::foo)不对。
2) 必须有限定符:例如&foo不对。即使在类ClassName的作用域内也不行。
3) 必须使用取地址符号:例如直接写ClassName::foo不行。(虽然普通函数指针可以这样)
所以,必须要这样写:&ClassName::foo。
注意这里成员函数指针已经开始显示它“异类”的天性了。上面代码中注释A和B处两个表达式,产生了一个在C++里面没有类型(type)的“东西”(这是C++语言里面唯一的例外,其它任何东西都是有类型的),这就是.*和->*运算符:
(c.*pmf)
(Pc->*pmf)
这两个运算符求值生成的“东西”我们只知道可以把它拿来当函数调用一样使唤,别的什么也不能干,甚至都不能把它存在某个地方。就因为这个原因,Andrei Alexandrescu 在他那本著名的《Modern c++ design》里面就说,成员函数指针和这两个操作符号是“curiously half-baked concept in c++”。(5.9节)
下面的代码说明了成员函数指针的一般用法:
class ClassName {public: int foo(int); }
int (ClassName::*pmf)(int) = &ClassNmae::foo;
ClassName c; //.*的用法,经由对象调用
(c.*pmf)(5); // A
ClassName *pc = &c; //->*的用法,经由对象指针调用
(Pc->*pmf)(6); // B
使用typedef可以让代码变得略微好看一点:
typedef int (ClassName::*PMF)(int);
PMF pmf = &ClassName::foo;
注意获取一个成员函数指针的语法要求很严格:
1) 不能使用括号:例如&(ClassName::foo)不对。
2) 必须有限定符:例如&foo不对。即使在类ClassName的作用域内也不行。
3) 必须使用取地址符号:例如直接写ClassName::foo不行。(虽然普通函数指针可以这样)
所以,必须要这样写:&ClassName::foo。
注意这里成员函数指针已经开始显示它“异类”的天性了。上面代码中注释A和B处两个表达式,产生了一个在C++里面没有类型(type)的“东西”(这是C++语言里面唯一的例外,其它任何东西都是有类型的),这就是.*和->*运算符:
(c.*pmf)
(Pc->*pmf)
这两个运算符求值生成的“东西”我们只知道可以把它拿来当函数调用一样使唤,别的什么也不能干,甚至都不能把它存在某个地方。就因为这个原因,Andrei Alexandrescu 在他那本著名的《Modern c++ design》里面就说,成员函数指针和这两个操作符号是“curiously half-baked concept in c++”。(5.9节)
- 类的成员函数指针的使用方法
- C++成员函数指针的使用方法
- 成员函数的指针(C++)
- C++:指向对象成员函数的指针
- [c++] 函数指针和函数指针数组的使用方法
- 【C/C++】类成员函数地址的获取及使用方法
- 成员函数的指针
- 成员函数的指针
- 带成员函数指针的成员函数
- C++的成员函数指针简要
- 成员函数指针与高性能的C 委托
- C++的成员函数指针简要
- C++的成员函数指针简要
- C++的成员函数指针简要
- C++的成员函数指针简要
- 指向成员函数的指针
- 类成员函数的指针
- 类的成员函数指针
- 2012我国粮食产量再增长
- Java多线程编程环境中单例模式的实现
- Linux驱动程序学习笔记(7)—— 阻塞、POLL
- 在对话框中使用CSrollView
- COM编程入门:第二部分 深入COM服务器
- C++成员函数指针的使用方法
- [wtl学习]-[第三天]-THUNK技术学习
- yum 失败(This system is not registered with RHN.)解决
- 当jsp文件放在某个文件夹下时jquery的$.ajax方法失效的--解决方案
- [hadoop源码阅读][4]-org.apache.hadoop.io.compress系列2-选择编解码器
- Extjs4 关于Store的一些操作
- 时刻提醒自己,多思考、用最简单的方法做事
- GNU ARM汇编--(二十)总结
- Vmware与主机间共享文件的七种方法(附图+详解)