测试两种方式的模板函数相等比较:
第一种:RTTI
template <typename T>
inline bool equals(T a, T b)
{
if (!std::strcmp(typeid(T).name(), typeid(0).name()))
{
return a == b;
}
else if (!std::strcmp(typeid(T).name(), typeid(0l).name()))
{
return a == b;
}
else if (!std::strcmp(typeid(T).name(), typeid(0.0f).name()))
{
return (a - 0.000001f<= b) && (a + 0.000001f >= b);
}
else if (!std::strcmp(typeid(T).name(), typeid(0.0).name()))
{
return (a - 0.00000001<= b) && (a + 0.00000001 >= b);
}
return false;
}
第二种:模板特化
template <typename T>
inline bool equals(T a, T b)
{
return a == b;
}
template <>
inline bool equals(float a, float b)
{
return (a - 0.000001f<= b) && (a + 0.000001f >= b);
}
template<>
inline bool equals(double a, double b)
{
return (a - 0.00000001<= b) && (a + 0.00000001 >= b);
}