Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

Разрешение перегрузок между функциями без параметров и с параметрами по умолчанию

#cpp


#include 

void 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 # include void 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(); }

Комментариев нет:

Отправить комментарий