关于类成员函数指针的正确写法
浏览:1955次 出处信息
一般来说,函数指针的用法是比较简单的。 比如对于函数:
1 |
int innerFunc(int num); |
可以使用:
1 2 |
int (*ptrFunc)(int); ptrFunc = innerFunc;//或&innerFunc |
或者为了复用:
1 2 3 |
typedef int (*FUNC)(int); FUNC ptrFunc; ptrFunc = innerFunc;//或&innerFunc |
但是当你使用类成员函数指针的时候,会发现完全不是那么一回事!而我今天就杯具的遇上了。。
废话不多说,直接上代码吧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#include <iostream> #include <string> #include <vector> #include <map> using namespace std; class Foo { public: string m_str; Foo() { m_str = ""; } void test(char* str,int num) { m_str = str; int (Foo::*ptrFunc)(int); ptrFunc = &Foo::innerFunc; //(*ptrFunc)(num); //(this->(*ptrFunc))(num); (this->*ptrFunc)(num); } int innerFunc(int num) { cout<<num<<endl; cout<<m_str<<endl; } }; int main(int argc, const char *argv[]) { Foo foo; foo.test("woo",100); return 0; } |
注释的部分千万不要打开,也千万不要以为是一样的,如果你不听我的劝阻非要试一下,好吧,他们会分别报如下错误:
error: invalid use of `unary *' on pointer to member
和
error: expected unqualified-id before '(' token error: invalid use of `unary *' on pointer to member
对于原因现在也没时间去钻研了,如果哪位朋友知晓麻烦告知一下,多谢~
建议继续学习:
- Linus:利用二级指针删除单向链表 (阅读:11363)
- C语言结构体里的成员数组和指针 (阅读:4860)
- 通过引用计数解决野指针的问题(C&C++) (阅读:3415)
- cpp智能指针的简单实现 (阅读:3103)
- C 语言中统一的函数指针 (阅读:3034)
- 重构发现:指针操作问题 (阅读:2409)
- 空指针的解引用 (阅读:2199)
- 一起空指针引发的程序问题的排查过程 (阅读:2069)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:SEO的优化法则:以不变制万变
后一篇:如何获取hive建表语句 >>
文章信息
- 作者:Dante 来源: Vimer
- 标签: 函数指针 指针 类成员
- 发布时间:2010-10-10 00:57:53
建议继续学习
近3天十大热文
- [45] 如何拿下简短的域名
- [45] IOS安全–浅谈关于IOS加固的几种方法
- [44] 图书馆的世界纪录
- [44] Oracle MTS模式下 进程地址与会话信
- [42] android 开发入门
- [41] 界面设计速成
- [41] 【社会化设计】自我(self)部分――欢迎区
- [39] 读书笔记-壹百度:百度十年千倍的29条法则
- [38] 视觉调整-设计师 vs. 逻辑
- [34] 程序员技术练级攻略