简介
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中文网其他相关文章!