首页 > 后端开发 > C++ > C中的函数重载可以根据返回值实现吗?如果可以,如何实现?

C中的函数重载可以根据返回值实现吗?如果可以,如何实现?

Barbara Streisand
发布: 2024-11-28 21:59:12
原创
780 人浏览过

Can Function Overloading in C   Be Achieved Based on Return Value, and if so, How?

通过返回值重写函数重载

简介

C 中的函数重载通常涉及根据参数类型区分函数。但是,也可以根据函数的返回值来重载函数。这允许您定义根据使用方式返回不同类型数据的函数。

问题陈述

考虑以下任务:

int n = mul(6, 3); // n = 18
std::string s = mul(6, 3); // s = "666"
登录后复制

在这里,您需要定义一个名为 mul 的函数,该函数返回整数或字符串,具体取决于其返回值

解决方案

显式键入:

一种方法是通过键入显式区分调用。例如,您可以定义两个单独的函数:

int mul(int, int);
std::string mul(char, int);
登录后复制

并按如下方式调用它们:

int n = mul(6, 3); // n = 18
std::string s = mul('6', 3); // s = "666"
登录后复制

虚拟指针:

另一个方法包括向每个函数添加一个虚拟参数,迫使编译器选择正确的参数。例如:

int mul(int *, int, int);
std::string mul(std::string *, char, int);
登录后复制

并将它们与:

int n = mul((int *) NULL, 6, 3); // n = 18
std::string s = mul((std::string *) NULL, 54, 3); // s = "666"
登录后复制

模板化返回值(选项 1):

您可以创建一个“虚拟”函数,其代码在实例化后将无法编译。然后,为所需的返回类型定义专门的模板版本:

template<typename T> T mul(int, int);
template<> int mul<int>(int, int);
template<> std::string mul<std::string>(int, int);
登录后复制

按如下方式使用它们:

int n = mul<int>(6, 3); // n = 18
std::string s = mul<std::string>(54, 3); // s = "666"
登录后复制

模板化返回值(选项 2):

对于具有不同参数的情况,您可以使用不同的参数定义单独的模板专业化类型:

template<typename T> T mul(int, int);
template<> int mul<int>(int, int);
template<typename T> T mul(char, int);
template<> std::string mul<std::string>(char, int);
登录后复制

并将它们称为:

int n = mul<int>(6, 3); // n = 18
std::string s = mul<std::string>('6', 3); // s = "666"
登录后复制

以上是C中的函数重载可以根据返回值实现吗?如果可以,如何实现?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板