Почему Cmath не использует шаблоны и / или перегрузки?

Многие из новых функций, введенных в C ++ 11 TR1, имеют ужасные C-подобные сигнатуры. Например, цитируя документацию Boost TR1 (http://www.boost.org/doc/libs/1_52_0/doc/html/boost_tr1/subject_list.html#boost_tr1.subject_list.special):

// [5.2.1.1] associated Laguerre polynomials:
double assoc_laguerre(unsigned n, unsigned m, double x);
float assoc_laguerref(unsigned n, unsigned m, float x);
long double assoc_laguerrel(unsigned n, unsigned m, long double x);

Очевидно, что можно было бы предпочесть некоторую шаблонную реализацию (которая на самом деле является «родной» сигнатурой этих функций в Boost) или, по крайней мере, некоторую перегрузку вместо нескольких идентификаторов.

Я могу понять, что стремление к совместимости с C означает поддержку этих идентификаторов, но это неудобство для чисто говорящих на C ++. В дополнение к <cmath>может быть <math>, с более естественными интерфейсами.

Что мне не хватает (кроме, возможно, некоторых ранее заданных вопросов)?

4

Решение

Я не знаю о Boost, но все стандартные функции в
<cmath> есть перегрузки для трех стандартных типов, так что вы
например:

double cos(double);
float cos(float);
long double cos(long double);

вместо C:

double cos(double);
float cosf(float);
long double cosl(long double);

Я не совсем уверен, почему вы хотите шаблон функции вместо
Перегрузки. Для большинства математических функций нет общего
реализация возможна; правильная реализация будет зависеть
на точность, правила округления и т. д., которые различны для каждого
тип. Таким образом, альтернативой будет функция шаблона без
общая реализация и три специализации. И что
это покупает вас по сравнению с «более простыми» перегруженными функциями?

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]