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

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

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

#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);
}

LIVE