Ограничьте область действия #include - PullRequest
0 голосов
/ 06 февраля 2019

Фон: Я хочу включить NVIDIA optimus по умолчанию.Решение, рекомендованное NVIDIA, заключается в использовании extern "C" _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;.

Поэтому мне нужно определить DWORD.

Я прочитал этот вопрос , который требует минимумазаголовок, который определяет DWORD с лучшим решением для определения WIN32_LEAN_AND_MEAN и все еще использовать windows.h или определять его самостоятельно, потому что он вряд ли изменится.

В отличие от упомянутого вопроса, у меня нет проблемс размером windows.h сам по себе (нет проблем при использовании скомпилированных заголовков).Однако я хотел бы избежать засорения глобального пространства имен всеми его типами, функциями и т. Д., Тем более что мне нужен только один тип для одной строки кода.

TLDR: Есть ли способвключить заголовок, но все его содержимое доступно только в ограниченном объеме?

Обратите внимание, что вы не можете просто включить заголовок в пространство имен, например:

namespace encloseWindowsTypes {
  #include <Windows.h>
  extern "C" _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
}

, так как частьWindows.h полагается на то, что предыдущая часть была определена в глобальном пространстве имен, и вы получите ошибки типа 'div_t': is not a member of '`global namespace''.

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