gpt4 book ai didi

c++ - 我可以为特定功能显式取消定义宏吗?

转载 作者:可可西里 更新时间:2023-11-01 10:55:55 25 4
gpt4 key购买 nike

我编写了一个模板函数来执行整数的快速对数基数 2。它在我的测试程序中有效,但是当我将它粘贴到我的主项目中时,我发现我遇到了 windows.h 的问题。 header 。问题是我正在使用 c++ std::numeric_limits<T>::max()功能但windows.h包括一个也称为 max 的宏作为一个宏,它不是命名空间感知的,并且覆盖了我使用真正的 C++ 函数的尝试。无论如何,除了不包括 windows.h 之外,我可以避免这种情况吗? ? (这不是一个真正的选择)

这是我的功能:

// Returns x where x = log2(n)
template<typename T>
T log2i(T n)
{
static const T infinite(std::numeric_limits<T>::max());
T x = 0;

if (n == 0)
{
return infinite;
}
if (n > 1)
{
while (n >>= 1)
{
++x;
}
}

return x;
}

最佳答案

static const T infinite((std::numeric_limits<T>::max)());

会起作用:额外的括号会阻止宏扩展。

关于c++ - 我可以为特定功能显式取消定义宏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29097274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com