背景:我想默认启用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''
的错误。