在看APUE Figure1.10的时候发现signal(SIGINT, sig_int)这里的sig_int直接用的函数名,但是看Thinking-in-C++ Vol.2的时候发现mem_fun(&Shape::draw)却对函数名进行了取地址操作,感觉有疑问就查了一下资料,下面的代码可以展示出这两者之间的一些区别

参考资料:

http://stackoverflow.com/questions/3050805/pointer-to-const-member-function-typedef

http://www.cplusplus.com/reference/functional/mem_fun1_t/

http://www.cnblogs.com/taobataoma/archive/2007/08/30/875743.html

http://www.cplusplus.com/reference/functional/mem_fun/

代码:

 #include <functional>
#include <iostream>
#include <algorithm> using namespace std; void my(int arg); class MyClass
{
public:
void my(int arg) { cout << arg << endl; }
}; // 方法1,2 typedef void func_ptr(int); // func_ptr与func_ptr2本质是一样的,选择哪种定义方式看你的喜好
typedef void (*func_ptr2)(int); // 参考:http://www.cnblogs.com/qrlozte/p/4439002.html
void dosomething_one(func_ptr ptr);
void dosomething_two(func_ptr2 ptr); // 方法3,4,5 void dosomething_three(void (MyClass::*my_ptr)(int)); typedef void FuncType(int);
typedef FuncType MyClass::*MyClassFuncType; typedef void (MyClass::*MemberFuncType)(int); void dosomething_four(MyClassFuncType ptr); void dosomething_five(MemberFuncType ptr); int main() {
/*
方法1,2本质是一样的
方法3,4,5本质也是一样的
*/
dosomething_one(my);
dosomething_two(my);
dosomething_three(&MyClass::my);
dosomething_four(&MyClass::my);
dosomething_five(&MyClass::my);
return ;
} ///:~ void my(int arg)
{
cout << arg << endl;
} void dosomething_one(func_ptr ptr)
{
ptr();
} void dosomething_two(func_ptr ptr)
{
ptr();
} void dosomething_three(void (MyClass::*my_ptr)(int))
{
MyClass *obj = new MyClass;
(obj->*my_ptr)();
delete obj;
} void dosomething_four(MyClassFuncType ptr)
{
MyClass *obj = new MyClass;
(obj->*ptr)();
delete obj;
} void dosomething_five(MemberFuncType ptr)
{
MyClass *obj = new MyClass;
(obj->*ptr)();
delete obj;
}

C Pointer-to-Function 与 C++ Pointer-to-MemberFunction 的区别的更多相关文章

  1. pointer to function

    指针.函数.数字.结构体.指针函数.函数指针 初学不好区分,做点儿实验来有效区分一下,以下代码采用dev-C++平台测试 //pointer to fucntion 函数功能是 基地址加偏移量得到偏移 ...

  2. 函数指针(pointer to function)——qsort函数应用实例

    一,举例应用 在ACM比赛中常使用 stdlib.h 中自带的 qsort 函数,是教科书式的函数指针应用示范. #include <stdio.h> #include <stdli ...

  3. 指针函数(Pointer Function)和函数指针(Pointer to Function或Function Pointer)

    一.指针函数 1.解释:指针函数很好理解:简单来说,就是一个返回指针的函数,本质是一个函数.如: int fun(int x,int y);    //这是一个普通函数的声明,返回值是一个int类型, ...

  4. 野指针(Wild pointer)和悬垂指针(dangling pointer)

    详细参考如下: Dangling pointer(悬垂指针.迷途指针)和 Wild pointer(野指针) 迷途指针经常出现在混杂使用malloc() 和 free() 库调用: 当指针指向的内存释 ...

  5. [C++] the pointer array & the array's pointer

    int *p[4]------p是一个指针数组,每一个指向一个int型的int (*q)[4]---------q是一个指针,指向int[4]的数组 --> type: int(*)[4] vo ...

  6. js中 var functionName = function() {} 和 function functionName() {} 两种函数声明的区别

    js中有两种声明函数的方法,分别为: var functionOne = function() { // Some code }; function functionTwo() { // Some c ...

  7. js中 var functionName = function() {} 和 function functionName() {} 两种函数声明的区别 (译)

    stackOverflow中看到了很久以前问的一个关于函数声明的问题,问题对函数剖析的特别深.这里翻译了一下组织成一篇小博文,加深一下对这两种声明方式的印象.虽是老调重弹,但是只要能帮助理解问题,不管 ...

  8. JS中var声明与function声明以及构造函数声明方式的区别

    JS中常见的三种函数声明(statement)方式有这三种: // 函数表达式(function expression) var h = function () { // h } // 函数声明(fu ...

  9. Google C++ Style Guide

    Background C++ is one of the main development languages used by many of Google's open-source project ...

  10. .NET软件工程师面试总结

    1.手写画出系统架构图,系统代码架构,有什么技术难点?  2.手写画出系统部署图 CDN(一般购买别人的服务器会自动CDN,他们自己配置就OK啦) 3.asp.net 的session怎么实现会话共享 ...

随机推荐

  1. iOS:下拉刷新控件UIRefreshControl的详解

    下拉刷新控件:UIRefreshControl 1.具体类信息: @interface UIRefreshControl : UIControl //继承控制类 - (instancetype)ini ...

  2. OpenCV学习(15) 细化算法(3)

          本章我们学习一下Hilditch算法的基本原理,从网上找资料的时候,竟然发现两个有很大差别的算法描述,而且都叫Hilditch算法.不知道那一个才是正宗的,两个算法实现的效果接近,第一种算 ...

  3. C/C++ 中头文件相互包含引发的问题

    转自:http://blog.csdn.net/hazir/article/details/38600419 今天下午遇到一个头文件相互包含而导致的编译问题,花了我不少时间去调试没找到问题,最后晚上跟 ...

  4. 对于Ian的访谈,不少关于GAN的内容

    文章链接如下: http://3g.163.com/dy/article/DD1GBSLF0511ABV6.html 里面提到胶囊网络,我找了这篇文章看了下: https://blog.csdn.ne ...

  5. C#中 父类与子类相互强制转换之实验

    MSDN是很好,不过,有时需要自己动手实践一下,才能更好的理解和记住一些东西. 我看过很多技术文章,结果到用时,仍然是下不了手.似是而非的. 像上次写的“四舍六入五成双/四舍六入五留双/四舍六入五单双 ...

  6. java中遍历实体类属性和类型

    public static void testReflect(Object model) throws NoSuchMethodException, IllegalAccessException, I ...

  7. wifi连接android设备进行调试

    手机下载终端模拟器: 并输入例如以下$ su # setprop service.abd.tcp.port 5555 # stop adbd # start adbd 在cmd中输入adb conne ...

  8. 【Linux】shell中svn报错:svn: Can't convert string from 'UTF-8' to native encoding:xxx

    解决办法: shell中svn命令之前添加: #!/bin/bash export LC_ALL=en_US.UTF- export LANG=en_US.UTF- export LANGUAGE=e ...

  9. DD_belatedPNG

    我们知道IE6是不支持透明的PNG的,这无疑限制了网页设计的发挥空间. 然而整个互联网上解决这个IE6的透明PNG的方案也是多不胜数,从使用IE特有的滤镜或是e­xpression,再到javascr ...

  10. Selenium中定位元素的方法

    find_element_by_id()find_element_by_name()find_element_by_class_name()find_element_by_tag_name()find ...