【发布时间】:2013-11-14 18:12:15
【问题描述】:
我想对几种整数类型(16、32、64 位)和浮点类型(float、double、long double)执行类似但不相同的计算。大多数代码是相同的,但对于 int 和 float,某些部分需要以不同的方式完成。例如,比较整数可以用 a==b 来完成,而比较浮点数应该用 abs(a-b) 来完成
这样做的一种方法是将 int 和 float 之间不同的代码部分隔离到小函数中,并为每种类型专门化模板。但是,我不想为每个整数类型复制粘贴相同的代码,为每个浮点类型复制粘贴另一个代码。因此问题是:是否可以一次为多种类型专门化模板函数?如果合法,语义上类似于以下内容:
template<>
bool isEqual< short OR long OR long long >( T a, T b ) {
return a == b;
}
template<>
bool isEqual< float OR double OR long double >( T a, T b ) {
return abs( a - b ) < epsilon;
}
【问题讨论】:
-
在 C++11(或 boost)中,有像
std::is_floating_point这样的类型特征。