#cpp
#includevoid func(int a = 256) // Самое очевидное убрать значение по умолчанию. { std::cout << "default\n"; } void func() { std::cout << "no param\n"; } int main() { func(); // Ошибка перегрузки. } Какие еще способы решения данной проблемы есть кроме самой очевидной - убрать значение по умолчанию у функции с аргументом?
Ответы
Ответ 1
Можно заново объявить функции внутри main, в этот раз без значения параметра по умолчанию: int main() { void func(int); void func(); func(42); // Раз func(); // Два }Ответ 2
Если в момент вызова выполнить явное приведение типа, то оно выберет конкретную функцию из набора перегруженных ((void (*)()) func)(); То же самое произойдет, если инициализировать указатель требуемого типа и сделать вызов через него void (*p)() = func; p();Ответ 3
Если перегрузка не удаётся, это значит что ваша новая функция очень индивидуальная. Тогда весь новый код пишите в своём пространстве имён. // g++ -Wall -Wpedantic -std=c++98 перегруз.cpp # includevoid func(int a = 256) // Самое очевидное убрать значение по умолчанию. { std::cout << "Моя жизнь принадлежит Орде" << std::endl; } namespace VasjaPupochki { void func() { std::cout << "Моя жизнь принадлежит Насте" << std::endl; } } int main() { setlocale(LC_ALL, "ru"); func();// Ошибка перегрузки. VasjaPupochki::func(); }
Комментариев нет:
Отправить комментарий