Почему я не могу вызвать какие-либо другие перегрузки той же функции, когда они находятся внутри конкретной функции, перегруженной в C ++? - PullRequest
2 голосов
/ 24 февраля 2020

Лучше всего проиллюстрировать этот вопрос простой программой.

#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 (в данном случае, с одним аргументом), компилятор позволяет мне использовать только эту конкретную перегрузку, поэтому код не компилируется.

Почему это? Кроме того, есть ли способ смягчить эту проблему, чтобы мне не приходилось переписывать одно и то же тело функции дважды?

1 Ответ

4 голосов
/ 24 февраля 2020

Порядок декларации имеет значение здесь.

Переместить 2-ю перегрузку (printPoint(int, int)) до 1-й (printPoint(std::pair <int, int>); в противном случае он невидим внутри 1-й перегрузки. т.е.

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

...