重载函数是完全不同的几个函数,有不同的函数地址,当我们调用函数时,编译器根据实参确定要调用哪一个重载函数。有时候我们需要不调用函数的情况下获取某个重载函数的地址(比如将重载函数作为接口导出),该怎么做呢?

除了函数调用以外,以下7种语境下也会让编译器对重载函数作出选择,我们可以通过指定函数指针类型获取重载函数地址。

#include "stdafx.h"
#include <cstdio>
#include <iostream>int func(int value)
{return value;
}int func(double value)
{return value;
}void printFuncAddress(int(&f1)(int), int(*f2)(double))
{printf("f1:%08x,f2:%08x\n", f1, f2);
}struct PrintFuncStruct{void operator<<(int(*f)(double)) {printf("func:%08x\n", f);}
};typedef int(*func1)(int);func1 getFunc()
{return func;
}template< int(*F)(int) >
struct Templ {};int main()
{//初始化时选择重载函数int(*myFunc1)(int value) = &func;//选择int func(int value) //函数名称前加不加取地址符结果都一样int(*myFunc2)(double value) = func;//选择int func(double value)printf("myFunc1:%08x,myFunc2:%08x\n", myFunc1, myFunc2);//赋值时选择重载函数myFunc1 = &func;//选择int func(int value)printf("myFunc1:%08x,myFunc2:%08x\n", myFunc1, myFunc2);//作为函数实参//第一参数选择int func(int value) //第二参数选择int func(double value)printFuncAddress(func,func);//自定义运算符//选择int func(double value)PrintFuncStruct printFuncStruct;printFuncStruct << func;//作为返回值//选择int func(int value) printf("func:%08x\n", getFunc());//类型转换//选择int func(int value) auto p = static_cast<int(*)(int)>(func);printf("func:%08x\n", p);//模板实参//选择int func(int value) Templ<func> t;system("pause");return 0;
}
myFunc1:0137ff71,myFunc2:0137ff67
myFunc1:0137ff71,myFunc2:0137ff67
f1:0137ff71,f2:0137ff67
func:0137ff67
func:0137ff71
func:0137ff71

C++获取重载函数的地址相关推荐

  1. 获取成员函数地址及获取函数地址

     首先我们定义一个类Ctest,类里面包含三个不同形式的成员函数,静态成员函数statFunc().动态成员函数dynFunc()和虚拟函数virtFunc().在main函数中我们利用cout标 ...

  2. php 获取ip mac,php获取IP、MAC地址函数

    参数$AiType取值:1:IP,2:MAC,3:IP+MAC 返回 return string:地址串 function GetClientAddr($AiType=0) { $sMac = &qu ...

  3. 动态获取API函数地址---对抗win7 aslr安全机制

    本人近期在研究缓冲区溢出,在学习中发现,win7下系统关键函数的地址随机化了(每次重启后地址有变),为了解决地址定位问题,在偌大的互联网上找了好久,贴来分享下,以作备用. -------------- ...

  4. js根据name获取value_js 函数的重载

    js 函数的重载 我们知道,很多编程语言都有函数的重载. 所谓的重载,看定义: 重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重 ...

  5. C++ | C++ 重载运算符和重载函数

    文章目录 C++ | C++ 重载运算符和重载函数 C++ 重载运算符和重载函数 C++ 中的函数重载 实例1: C++ 中的运算符重载 实例2: 可重载运算符/不可重载运算符 运算符重载实例 运算符 ...

  6. 微信小程序获取用户收货地址 完整代码

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 获取用户收货地址需要用户点击授权,所以有两种情况,确认授权.取消授权. 情况一,用户第一次访问用户地址授权,并 ...

  7. 构造函数不能为虚/重载函数总结

    构造函数不能为虚/重载函数总结 作为一个类,他最基础的成员函数就要数构造函数了.这里我们先探讨一下构造函数为什么不能是虚函数. 在解决这个问题之前,要先明白类中函数的调用方式.一个类的函数共用一个函数 ...

  8. 重载函数与函数模板(转)

    原文地址:http://www.jizhuomi.com/software/45.html hello,everyone,鸡啄米上一节讲到的是函数的参数传递和内联函数,这一讲鸡啄米会给大家讲点稍微有点 ...

  9. 一起talk C栗子吧(第一百二十三回:C语言实例--显示变量和函数的地址)

    各位看官们,大家好,上一回中咱们说的是多线程的样例.这一回咱们说的样例是:显示变量和函数的地址. 闲话休提,言归正转.让我们一起talk C栗子吧! 在编敲代码时,有时候须要获取程序中变量和函数的地址 ...

最新文章

  1. python守护进程进程池_Python进程池非守护进程?
  2. 服务器供电系统图,【科·堂】图解5G和数据中心电源制式
  3. RV1108之MiniGui显示参数配置
  4. 点到线段的距离_直线垂直,垂线的性质,点到直线的距离
  5. 新三国 雷人台词----雷死一群程序员
  6. java 不定长参数实现原理
  7. 微课|中学生可以这样学Python(例4.3):百钱买百鸡
  8. Linux服务器上无法保存修改的文件
  9. 七、MySQL中的字符集 - 系统的撸一遍MySQL
  10. android中的SharedPreferences存储
  11. java命令行导出、导入sql文件
  12. golang 使用openoffice 生成pdf_使用golang生成PDF文件
  13. 麒麟LINUX(飞腾ARM)更新软件源
  14. java 操作 led_Java中使用反射机制操作LED
  15. 短信中心号码iphone_如何在iPhone上阻止来自特定号码的短信
  16. 3.8 main.js-常用配置【uni-app教程uniapp教程(黄菊华-跨平台开发系列教程)】
  17. org.apache.kafka.clients.consumer.OffsetOutOfRangeException: Offsets out of range with no configured
  18. html如何制作展开全文,如何实现文章内容页点击“展开阅读全文”的功能
  19. 怎么用okhttp获得响应头数据
  20. Python第三方库资源

热门文章

  1. 最全公关培训资料合集(共57份)
  2. 1.【预习课】项目管理预备知识
  3. 商汤java实习生面试题
  4. php 模板 {{}},PHP字符串模板引擎
  5. linux入门笔记01
  6. 新一代跨平台云备份工具Duplicacy
  7. 波形分析软件 android,新版 PicoScope 软件提供更出色的波形分析和功能 – 免费获取!...
  8. Linux-3 常用工具
  9. vbox导入虚拟机失败
  10. IE10下 .hide()隐藏对象不生效(其它所有主流浏览器都没这个问题)的处理方式