Как добавить функцию класса в список восстановления при перегрузке внутри другой функции того же класса? - PullRequest
1 голос
/ 11 марта 2020

Вопрос находится во фрагменте кода:

#include <algorithm>
#include <utility>
#include <iostream>


struct A {
    static int max(std::pair<int, int> const& pair) {
        return std::max(pair.first, pair.second);
    }

    int use_max(std::pair<int, int> const & p, int const i) {
        // 1) The following works fine:
        // return std::max(i, max(p));

        // 2) The following also works fine:
        // using std::max;
        // return max(i, this->max(p));

        // 3) This does not compile, afaiu cause the A::max did
        // not even got into the overload resolution list due to
        // name look up rules.
        using std::max;
        return max(i, max(p));

        // Question: What do I write here to add A::max into the
        // overload resolution list, e.g., something like:
        // using std::max;
        // using A::max;
        // return max(i, max(p));
    }

};

int main() {
    std::cout << A().use_max(std::make_pair(2, 3), 1);
}

1 Ответ

0 голосов
/ 11 марта 2020

using A::max; невозможно, поскольку A является классом, а не пространством имен.

И ответ на ваш запрос прост:

return max(i, A::max(p));

Я не уверен, что еще вы надеетесь достичь здесь.

Обновление: Еще подумал, и вы можете изменить код таким образом?

#include <algorithm>
#include <utility>
#include <iostream>
struct B {
    static int max(int A, int B)
    {
        return std::max(A,B);
    }
};
struct A:B{
    static int max(std::pair<int, int> const& pair) {
        return std::max(pair.first, pair.second);
    }
    using B::max;
    int use_max(std::pair<int, int> const & p, int const i) {
        return max(i, max(p));
    }
};
int main() {
    std::cout << A().use_max(std::make_pair(2, 3), 1);
}
...