Лучше всего проиллюстрировать этот вопрос простой программой.
#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
выполнили sh одно и то же, воспользовавшись перегрузками. Однако, хотя в рамках определенной перегрузки функции printPoint
(в данном случае, с одним аргументом), компилятор позволяет мне использовать только эту конкретную перегрузку, поэтому код не компилируется.
Почему это? Кроме того, есть ли способ смягчить эту проблему, чтобы мне не приходилось переписывать одно и то же тело функции дважды?