虽然 C 支持基于参数类型的函数重载,但它还提供了根据返回值选择不同函数实现的有趣可能性价值。对于处理相同输入可以产生不同所需输出的情况,这可能是一种很有价值的技术。
在所呈现的用例中,我们有一个函数 mul ,它应该返回一个当分配给整型变量时为整数,当分配给字符串变量时为字符串。然而,C 需要显式微分才能实现这一点:
std::string s = mul(54, 3); // Proper conversion
另一种方法是将虚拟参数添加到函数签名中。通过传递所需返回类型的 NULL 指针,我们可以强制编译器选择适当的函数:
int mul(int* dummy, int i, int j) { return i*j; } std::string mul(std::string* dummy, char c, int n) { return std::string(n, c); } int n = mul(NULL, 6, 3); // Return integer std::string s = mul(NULL, 54, 3); // Return string
C 模板提供了另一种返回值方法超载。我们可以创建一个“虚拟”函数,其代码除非使用特定模板实例化,否则不会编译:
template<typename T> T mul(int i, int j) { const int k = 25 ; k = 36 ; } template<> int mul<int>(int i, int j) { return i * j ; } template<> std::string mul<std::string>(int i, int j) { return std::string(j, static_cast<char>(i)) ; }
如果需要,基于模板的重载也可以支持不同的参数类型来实现不同的返回值特化:
template<typename T> T mul(int i, int j) {...} template<> int mul<int>(int i, int j) {...} template<> std::string mul<std::string>(char i, int j) {...}
通过利用这些技术,程序员可以创建提供不同输出的函数关于预期返回值类型。
以上是C 函数可以根据返回类型重载吗?的详细内容。更多信息请关注PHP中文网其他相关文章!