Один из способов вывести все функции, которые были рассмотрены, - это использовать определенное имя функции с набором параметров, которые не будут ничего совпадать:
struct DumpThemAll {};
int main(int argc, char* argv[])
{
std::cout << DumpThemAll() << std::endl;
}
Это (обычно) выгрузит всеoperator<<
, которые были рассмотрены для разрешения перегрузки.В этом конкретном примере он может стать волосатым.
Если вы хотите сбросить только некоторые специфические функции, это намного сложнее.Единственный способ сделать это - искусственно создать неоднозначный вызов, однако вызов будет неоднозначным, только если предоставляемая вами ложная функция имеет точно такой же «счет», что и наилучшее совпадение ... поэтому трудно придумать одну такую функцию, когдаВы не понимаете, как работает эта оценка (и лично я не понимаю всего этого ... слишком много правил ...)
Однако я бы добавил, что, хотя есть толькоГорстка людей, которые могут процитировать правила перегрузки с ног на голову или, возможно, даже понять их, в общем, это не мешает вам работать, поскольку стандарт пытается рассмотреть все возможные случаи, пока вы работаете только спара из них.
Кроме того, злоупотребление перегрузкой функций / операторов делает вашу программу нечитаемой, потому что она загадочна для человека (особенно если учитывать особенности файлов, включенных в текущий модуль перевода).