c++标准库中的min与C语言宏定义min的冲突解决办法

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
#endif

template<typename T = unsigned int>
class XNumberLimit
{
public:
    static T get_min()
    {
        return std::numeric_limits<T>::min();
    }
    static T 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)();

 

posted @ 2019-12-01 20:40  日月王  阅读(1386)  评论(1)    收藏  举报