限制#include <windows.h>

时间:2019-02-06 00:49:12

标签: c++ windows

背景:我想默认启用NVIDIA optimus。 NVIDIA建议的解决方案是使用extern "C" _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;

因此,我需要定义DWORD

我已经读过this question,它要求定义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''的错误。

0 个答案:

没有答案