Сообщения

Сообщения за январь, 2020

Помощь компилятору С++ в разрешении перегрузки функций

В некоторых случаях компиляторы С++ не могут выбрать подходящую перегружаемую функцию, например, в очевидной с человеческой точки зрения ситуации — возникает ошибка компиляции: void f(int i){} void f(string s){} vector<int> int_c = { 1, 2, 3, 4, 5 }; vector<string> string_c = { "Sic" ,"transit" ,"gloria" ,"mundi" }; for_each(begin(int_c), end(int_c), f);//error C2672: "for_each": не найдена соответствующая перегруженная функция Проблема – в отсутствии параметров у f в последней строке, по которым компилятор мог бы произвести разрешение перегрузки. То, что параметрами for_each передаются итераторы вполне определенного типа – для компилятора не имеет значения. Можно предложить несколько «лобовых» способов решения проблемы: 1) Использование static_cast<>() для принудительного приведения к указателю на функцию нужного типа. Приводим к указателю на void f(int i): std::for_each(begin(int_c), end(int_c), static_cast<v...