惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy International News Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Troy Hunt's Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
V2EX - 技术
V2EX - 技术
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
O
OpenAI News
Cloudbric
Cloudbric
Google Online Security Blog
Google Online Security Blog
Schneier on Security
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Help Net Security
Help Net Security
Cyberwarzone
Cyberwarzone
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Spread Privacy
Spread Privacy
NISL@THU
NISL@THU
N
News and Events Feed by Topic
T
Tenable Blog
S
Security @ Cisco Blogs
N
News and Events Feed by Topic
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
P
Proofpoint News Feed
Webroot Blog
Webroot Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Jina AI
Jina AI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
L
LangChain Blog
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东

博客园 - 能巴

[SQL Server]Index/deadlock 业务学习 [LoadRunner]负载测试工具 [P4 password]Avoiding the Perforce Prompt for Password in Windows [收藏转载]2011 APP年终总结——日均160元的收入经历 [收藏转载]我所积累的20条编程经验 [收藏转载]明星软件工程师的十种特质 Importance of Side Projects [转载]最好的HTML 5编码教程和参考手册分享 . [Mobility]移动开发概览 How Browser Works [c++ 11x rvalue reference] [转载]The Biggest Changes in C++11 (and Why You Should Care) Summary of Exception Exception Cost STL算法find_if和find QT信号和槽 How to set NoStepInto for VS debugging Review: Function Pointer
一般函数指针和类的成员函数指针
能巴 · 2012-02-08 · via 博客园 - 能巴

问题:在项目开发中,试图把类的非static成员函数的指针赋值给普通函数指针变量(前提当然是函数定义是一样的),结果编译不过。

原因:类的非static成员函数包含一个隐含的this指针。在某些calling convention下,this指针作为函数的附加参数入栈,相当于多了一个参数传入。另一个更通用的解释是:非static的成员函数指针的定义和调用都需要指明作用到哪个类/具体对象上,明显与一般函数指针的定义和调用是不兼容的。我的理解是非static的成员函数指针只是一个offset,因此需要在获取对象指针的基础上进行函数调用才行。类的静态成员函数采用与一般函数指针相同的调用方式,而受this指针的影响,类的非静态成员函数与一般函数指针是不兼容的。而且,不同类的this指针是不一样的,因此,指向不同类的非静态成员函数的指针也是不兼容的。指向类的非静态成员函数的指针,在声明时就需要添加类名。

A a1, a2;

  A *p= &a1; //创建指向A的指针//创建指向成员的指针并初始化

  void (A::*pmf)(char *, const char *) = &A::strcpy;

  //要将成员函数绑定到pmf,必须定义呼叫的对象。//可以用*号引导:

  void dispatcher(A a, void (A::*pmf)(char *, const char *))

  {

   char str[4];

   (a.*pmf)(str, “abc”); //将成员函数绑定到pmf

  }

  //或用A的指针表达方式指向成员指针:

  void dispatcher(A * p, void (A::*pmf)(char *, const char *))

  {

   char str[4]; (p->*pmf)(str, “abc”);

  }

  //函数的调用方法为:

  dispatcher(a, pmf); // .* 方式

  dispatcher(&a, pmf); // ->* 方式 

参考:

http://www.cnblogs.com/xianyunhe/archive/2011/11/26/2264709.html
http://www.cnblogs.com/jianqiang2010/archive/2011/01/20/1940305.html