我正在编译我使用的一个项目,这次使用 VS2010,只是为了发现 windows.h 中的一个包含有一个 typedef INPUT,它与我已经拥有的代码中的导出 const 字符串发生冲突。
//winuser.h(行:5332)
typedef struct tagINPUT {
DWORD type;
union
{
MOUSEINPUT mi;
KEYBDINPUT ki;
HARDWAREINPUT hi;
};
} INPUT, *PINPUT, FAR* LPINPUT;
//foo.h
//stuff here
extern FOO_DLL_API const string INPUT;
现在,我不在有问题的 .cpp 中使用 INPUT(并且我不拥有大部分代码),并试图将影响降到最低,我做了以下事情:
//我的文件.cpp
#include <foo.h>
namespace windowsLib { //I added this
# include <windows.h>
}
using namespace windowsLib;
到目前为止,这种方法运行良好,但我想问您是否发现这种方法存在潜在问题,或者您是否有更好的建议。
编辑:
我感谢所有关于为什么这是一个坏主意的评论和解释。我从您的评论中得到的是我应该更改 foo.h 并将内容放入命名空间。但是,这样做会影响几十个文件,甚至更多,现在需要命名空间限定。
有没有办法在不触及所有这些文件的情况下做到这一点“正确的方式”?
如果我是代码的所有者,我会进行此更改并完成它,但我必须提出一个解决方案并获得批准并将其分配给某人等。因此,如果更改很小,它会更容易。
编辑2:
我的最终建议是将班级分成两部分,如下所示:
//存根.cpp
#include <windows.h>
//Implementation of wrapper methods
//存根.h
class stub {
//public wrapper methods
}
//我的文件.cpp
#include <stub.h>
#include <foo.h>
我接受 Benlitz 的回答,因为该建议还可以解决我目前面临的当前最小影响约束的问题。不过,我感谢大家的意见。