TR1引入C ++ 11的许多新功能都有丑陋的类似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>
,具有更自然的界面。
我缺少的是什么(此外,可能还有一些先前提出的问题)?
答案 0 :(得分: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);
我不太清楚为什么你想要一个功能模板而不是 重载。对于大多数数学函数,没有通用 实施是可能的;正确的实施将取决于 精度,舍入规则等,每个都不同 类型。所以替代方案是没有模板功能 通用实现和三个专业化。什么 是否会因为“更简单”的重载功能而购买?