c++ 模板中,提供了根据类型输出类型的值域范围类模板,即

limits中的numeric_limits类模板函数max和min

使用时,需要注意,容易与C语言的宏定义min/max冲突

此时有几种解决办法:

1.先取消min/max的宏定义,使用完后恢复

如下:

 

#ifdef min#define __save_min
#undef min
#endif#ifdef max#define __save_max
#undef max
#endiftemplate<typename T = unsigned int>
classXNumberLimit
{
public:staticT get_min()
{
return std::numeric_limits<T>::min();
}
staticT get_max()
{
return std::numeric_limits<T>::max();
}
};

#ifdef __save_min
#define min(a, b) (((a) < (b)) ? (a) : (b)) #undef __save_min #endif#ifdef __save_max#define max(a, b) (((a) > (b)) ? (a) : (b)) #undef __save_max #endif

第二种办法,将min/max使用括号括起来,这样就可以绕开C语言的宏函数判断了

(std::numeric_limits<T>::min)();
(std::numeric_limits
<T>::max)();

 

标签: none

添加新评论