为什么我不能在 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);
}
最好用一个简单的程序来说明这个问题。
#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);
}