WinNT.h在VS2008 SP1安装中包含以下几行:
#define BitTest _bittest
#define BitTestAndComplement _bittestandcomplement
#define BitTestAndSet _bittestandset
#define BitTestAndReset _bittestandreset
#define InterlockedBitTestAndSet _interlockedbittestandset
#define InterlockedBitTestAndReset _interlockedbittestandreset
我有很多基于BitTest<>()
的模板是否有人知道禁用这些#defines的简单方法?
MS经常提供#define XXX符号,如果已定义,将禁用其标题的某些违规部分 - 例如NOMINMAX。
我一直无法找到解决上述问题的方法。
如果你对微软的许多可疑选择感到沮丧,请继续阅读。如果没有,请停在这里。 ;)
社论:
答案 0 :(得分:1)
不幸的是,微软认为可以让他们的API使用宏来表示名称,因为他们使用95%或更多的API来使它们对ANSI和Unicode API“透明地”工作。
看起来他们没有提供一种干净的方法来阻止定义宏。我认为你很难选择几个糟糕的选择,包括:
#undef BitTest
你自己winnt.h
标题BitTest<>
模板的模块我确信还有其他选择 - 我只是不确定哪一个是最不讨厌的。