c++ - 预处理器宏覆盖 C++ 中的函数定义

标签 c++ function overloading precompiler

我对 C++ 的基础知识相当熟悉,但缺乏经验(主要是 Java 代码),所以稍微“笨拙”的回复将不胜感激:)

我正在扩展一个更大的开源项目,它使用标准的 visual studio 类 limits.h,其中可以找到以下代码:

template<> class numeric_limits<double>
    : public _Num_float_base
    {   // limits for type double
public:
    typedef double _Ty;

    static _Ty (max)() _THROW0()
    {   // return maximum value
        return (DBL_MAX);
    }

我现在导入了另一个开源项目,它使用了 minwindef.h,里面有这段代码:

#ifndef max
#define max(a,b)            (((a) > (b)) ? (a) : (b))
#endif

构建现在中断,因为对于这一行

SUMOReal distance = std::numeric_limits<SUMOReal>::max();

编译器提示在没有任何参数的情况下使用 max()。 有什么快速的方法可以解决这个问题,或者我可以不使用我导入的库吗? :/

希望这已经足够清楚了,感谢您的任何建议!!

最佳答案

解决该问题的唯一方法是#undef 宏。

这就是传统上宏全部拼写为大写字母,而系统和标准函数全部为小写字母的原因之一。

关于c++ - 预处理器宏覆盖 C++ 中的函数定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19409499/

相关文章:

php - 函数内的 IF 语句

oop - 重载的 horzcat() 如何工作?

Matlab OOP - 重载大小()

c++ - 说明乘以 2 个常量整数时的 decltype 输出

c++ - `std::shared_ptr` 的智能指针模拟,带有用于将回调绑定(bind)到引用计数修改事件的 API,例如释放/保留……这是一回事吗?

C++ Armadillo : GCC vs VC++2013: Operator () and overloading

javascript - JS : getting error line number inside `new Function(...)`

c++ - 在特定对象实例上调用 C++ 函数指针

c++ - 重载小于 C++ 中的运算符出现错误

c++ - 如何将 QMap<QString, QMap<QString, int>> 转换为 QVariant?