C++获取重载函数的地址

C++获取重载函数的地址重载函数是完全不同的几个函数 有不同的函数地址 当我们调用函数时 编译器根据实参确定要调用哪一个重载函数 有时候我们需要不调用函数的情况下获取某个重载函数的地址 比如将重载函数作为接口导出 该怎么做呢 除了函数调用以外 以下 7 种语境下也会让编译器对重载函数作出选择 我们可以通过指定函数指针类型获取重载函数地址 include stdafx h include

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

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

#include "stdafx.h" #include  
     #include  
     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 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226388.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午11:01
下一篇 2026年3月16日 下午11:01


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号