有关模板的特化
刚接触STL中文版,对特化这个概念不清楚,大家可否解释下
比如说:
template <class T,class It> inline
T sun_all(It first,It last)
{
T sum;
for(sum=0;first!=last;++first)
sum+=*first;
return (sum);
}
将此模板特化为指针或float型,随便一个就可以谢谢!^_^
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
在网上查了些资料:
// general version
template <class T>
class Compare
{
public:
static bool IsEqual(const T& lh, const T& rh)
{
return lh == rh;
}
};
这是一个用于比较的模板类,里面可以有多种用于比较的函数, 以IsEqual为例。
一、特化为绝对类型
也就是说直接为某个特定类型做特化,这是我们最常见的一种特化方式, 如特化为float, double等
// specialize for float
template <>
class Compare <float> //这个地方可否解释一下
{
public:
static bool IsEqual(const float& lh, const float& rh)
{
return abs(lh - rh) < 10e-3;
}
};
上面代码在vc,dev上也不能通过
[解决办法]
1
[解决办法]
template <>
class Compare <float>
[解决办法]
vc可以用阿,至少2003开始就支持的很好了,
记得偏特化放cpp里,否则ms compiler可能会出现引用问题
intel的compiler放哪里都没有问题