请教一个泛型编程中求类型limits的问题
假设现在有一个模板类,接受模板参数T
template <typename T>
class Test
{};
假设传进去的T都是C++ builtin 类型,如char,int,short,float等等,我想在类中使用T类型的最大值和最小值,请问应该怎么得到,谢谢。
我现在的写法是:
template <typename T>
struct limits{};
template <>
struct limits <I8> {
enum {max_val = I8_MAX};
enum {min_val = I8_MIN};
};
template <>
struct limits <I16> {
enum {max_val = I16_MAX};
enum {min_val = I16_MIN};
};
template <>
struct limits <I32> {
enum {max_val = I32_MAX};
enum {min_val = I32_MIN};
};
template <>
struct limits <I64> {
enum {max_val = I64_MAX};
enum {min_val = I64_MIN};
};
template <>
struct limits <U8> {
enum {max_val = U8_MAX};
enum {min_val = U8_MIN};
};
template <>
struct limits <U16> {
enum {max_val = U16_MAX};
enum {min_val = U16_MIN};
};
template <>
struct limits <U32> {
enum {max_val = U32_MAX};
enum {min_val = U32_MIN};
};
template <>
struct limits <U64> {
enum {max_val = U64_MAX};
enum {min_val = U64_MIN};
};
template <>
struct limits <BOOLEAN> {
enum {max_val = B32_MAX};
enum {min_val = B32_MIN};
};
template <>
struct limits <F32> {
enum {max_val = 0 /*F32_MAX*/};
enum {min_val = 0 /*F32_MIN*/};
};
template <>
struct limits <F64> {
enum {max_val = 0 /*F64_MAX*/};
enum {min_val = 0 /*F64_MIN*/};
};
编译期间生成,但是问题在于F32和F64两种浮点数类型的最大值和最小值不是整型,所以不能这么用,望各位不吝赐教,谢谢。
[解决办法]
是啊,所以STL的 limits才把max/min做成函数的呀。
你可以把浮点的max_val 做成函数或者static数据成员。