Win32: BitTest, BitTestAndComplement, ... <- Как отключить этот мусор? - PullRequest
2 голосов
/ 10 февраля 2010

WinNT.h содержит следующие строки в установке VS2008 SP1:

#define BitTest _bittest
#define BitTestAndComplement _bittestandcomplement
#define BitTestAndSet _bittestandset
#define BitTestAndReset _bittestandreset
#define InterlockedBitTestAndSet _interlockedbittestandset
#define InterlockedBitTestAndReset _interlockedbittestandreset

У меня есть несколько шаблонов, основанных на BitTest <> ()

Кто-нибудь знает простой способ отключить эти # определения?

Часто MS действительно предоставляет символ #define XXX, который, если он определен, отключит какую-то оскорбительную часть своего заголовка - например, NOMINMAX.

Мне не удалось найти такое решение вышеуказанной проблемы.

Если вы разделяете разочарование по поводу многих сомнительных решений Microsoft, читайте дальше. Если нет, остановитесь здесь. ;)

Editorializing:

  • Почему Microsoft не могла просто использовать _bittest себя ???
  • Или почему они не могли использовать BITTEST, как все знают вас следует - всегда используйте все заглавные буквы для макросы!
  • Microsoft все еще #defining вещи в 2010 году ?! WTF?

1 Ответ

1 голос
/ 10 февраля 2010

К сожалению, Microsoft считает, что можно разрешить своим API-интерфейсам использовать макросы для имен, поскольку они делают это для 95% или более своих API-интерфейсов, чтобы сделать их «прозрачными» для API ANSI и Unicode.

Не похоже, что они предоставили чистый способ предотвратить определение макроса. Я думаю, что вы застряли с выбором из нескольких плохих вариантов, в том числе:

  • #undef BitTest себя
  • изменить заголовок winnt.h
  • разделите ваш код, использующий API Windows, непосредственно на модули, которые не зависят от вашего BitTest<> шаблона

Я уверен, что есть другие варианты - я просто не уверен, какой из них наименее неприятен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...