я просто читал статью в Википедии на C11, новую версию стандарта C выпущен в декабре 2011 года, и я увидел, что один из дополнительных функций был «выражения типа унифицированного»:C11 типовые выражения - почему бы просто не добавить функцию перегрузки?
Type-родовой выражений с использованием ключевого слова
_Generic
. Например, следующие макро cbrt (х) переводит к cbrtl (х), cbrt (х) или cbrtf (х) в зависимости от типа х:#define cbrt(X) _Generic((X), long double: cbrtl, \ default: cbrt, \ float: cbrtf)(X)
Это выглядит довольно ужасно для меня - если они все равно изменят язык, почему бы просто не добавить перегрузку функций, как на C++?
Возможно, потому, что для этого потребовалось бы имя mangling, а _Generic можно полностью решить во время компиляции. В любом случае, если вы серьезно относитесь к родовому программированию, вы не должны смотреть на C. –
Перегрузка функций, вероятно, повлечет за собой огромную проблему совместимости в обратном направлении практически во всех реализациях (подумайте, как C runtimes/linkers/loaders обрабатывают символы) – nos
@CatPlusPlus: Разрешение перегрузки для объявленных функций «inline» обеспечило бы 99% выгоды от перегрузки общей функции без каких-либо проблем с именами. Даже если кто-то хочет вызвать перегруженную функцию из других модулей, можно просто включить в файл заголовка перегруженные «встроенные» функции, которые затем будут вызывать функции с разными именами для разных типов параметров. Имена функций будут указаны в заголовочном файле, поэтому не требуется компиляция для компилятора. Были бы проблемы с этим? – supercat