说起C++的模板及模板特化, 相信很多人都很熟悉 ,但是说到模板特化的几种类型,相信了解的人就不是很多。我这里归纳了模板特化的几种类型, 一是特化为绝对类型; 而是特化为引用,指针类型;三是特化为另外一个模板类。
这里用一个简单的例子来说明这三种情况:
// 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; } }; // specialize for double template<> class Compare<double> { public: static bool IsEqual(const double& lh, const double& rh) { return abs(lh - rh) < 10e-6; } }; |