以下是一个用于求和的accum 模板,自动根据参数的类型求某段区间内元素值的总和
template<typename T>
class AccumulationTraits;template<>
class AccumulationTraits<char> {
public:
typedef int AccT;
static AccT zero() {
return 0;
}
};
template<>
class AccumulationTraits<short> {
public:
typedef int AccT;
static AccT zero() {
return 0;
}
};
template<>
class AccumulationTraits<int> {
public:
typedef long AccT;
static AccT zero() {
return 0;
}
};
template<>
class AccumulationTraits<unsigned int> {
public:
typedef unsigned long AccT;
static AccT zero() {
return 0;
}
};
template<>
class AccumulationTraits<float> {
public:
typedef double AccT;
static AccT zero() {
return 0.0;
}
};
...
template <typename T>
inline
typename AccumulationTraits<T>::AccT accum (T const* beg, T const* end) {
// return type is traits of the element type
typedef typename AccumulationTraits<T>::AccT AccT;
AccT total = AccumulationTraits<T>::zero();
while (beg != end) {
total += *beg;
++beg;
}
return total;
}
本文介绍了一个通用的累加模板,该模板能够根据输入元素的类型自动选择合适的累加方式,支持多种基本数据类型如char、short、int等,并提供了一种高效的方法来计算指定范围内元素的总和。

被折叠的 条评论
为什么被折叠?



