码迷,mamicode.com
首页 > 其他好文 > 详细

使用函数指针解决函数重载二义性调用问题

时间:2020-01-22 17:58:15      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:问题   最好   实现   一个   iostream   第一个   ring   str   void   

当实参对应重载函数的多个可行函数,且每个可行函数各自在一个实参上实现了更好的匹配时,编译器会因为程序具有二义性而报错。

例如:

#include<iostream>
using std::string;
using std::cout;
using std::cin;
using std::endl;

void ff(int, int)
{//重载函数1
    cout << "f1" << endl;
}
void ff(double, double = 3.14)
{//重载函数2
    cout << "f2" << endl;
}

int main()
{
    ff(2, 3.4);//第一个实参更加匹配函数1,第二个实参更加匹配函数2
    return 0;
}

此时编译器会报告有多个重载函数“ff”的实例与参数列表匹配。

可知这种函数重载方式本身不是特别合理。

但是如果我们非要使用这种具有二义性的实参该怎么办呢?

可以通过函数指针来指向想要调用的函数,能够避免二义性的产生。

#include<iostream>
using std::string;
using std::cout;
using std::cin;
using std::endl;
void ff(int, int)
{
    cout << "f1" << endl;
}
void ff(double, double = 3.14)
{
    cout << "f2" << endl;
}

int main()
{
    void (*pf)(double ,double);//函数指针pf指向第二个重载函数
    pf = ff;
    pf(2, 3.4);                //将调用第二个重载函数
    return 0;
}

虽然可以通过函数指针来避免这个问题,但是防止此类问题出现的最好方法还在于对重载函数形参的良好设计上。

使用函数指针解决函数重载二义性调用问题

标签:问题   最好   实现   一个   iostream   第一个   ring   str   void   

原文地址:https://www.cnblogs.com/sgawscd/p/12228872.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!