为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?

Why can't I call any other overloads of the same function while inside a particular function overload in C++?

本文关键字:函数 重载 调用 其他 任何 不能 C++ 为什么      更新时间:2023-10-16

最好用一个简单的程序来说明这个问题。

#include <iostream>
#include <utility>
void printPoint(std::pair <int, int> point) {
printPoint(point.first, point.second);
}
void printPoint(int x, int y) {
std::cout << x << ' ' << y << std::endl;
}
int main(void) {
std::pair <int, int> point(2, 3);
printPoint(point);
return 0;
}

我希望两个printPoint函数通过利用重载来实现相同的功能。然而,在printPoint函数的特定重载(在本例中为单参数重载(的范围内,编译器只允许我使用该特定重载,因此代码不进行编译。

为什么会这样?此外,有没有什么方法可以缓解这个问题,这样我就不必重写同一个函数体两次了?

这里的申报顺序很重要。

将第二个过载(printPoint(int, int)(移到第一个过载(printPoint(std::pair <int, int>(之前;否则它在第一次过载中是看不见的。即

void printPoint(int x, int y) {
std::cout << x << ' ' << y << std::endl;
}
void printPoint(std::pair <int, int> point) {
printPoint(point.first, point.second);
}

实时