【发布时间】:2012-05-24 07:27:58
【问题描述】:
我正在编译我使用的一个项目,这次是 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(而且我不拥有大部分代码),并试图将影响降到最低,我做了以下操作:
//myfile.cpp
#include <foo.h>
namespace windowsLib { //I added this
# include <windows.h>
}
using namespace windowsLib;
到目前为止,这种方法运行良好,但我想问您是否发现这种方法存在潜在问题,或者您是否有更好的建议。
编辑:
感谢所有关于为什么这是一个坏主意的 cmets 和解释。我从您的 cmets 得到的是我应该更改 foo.h 并将内容放入命名空间。但是,这样做会影响几十个文件,甚至更多,现在需要命名空间限定。
有没有办法在不触及所有这些文件的情况下以“正确的方式”做到这一点?
如果我是代码的所有者,我会进行此更改并完成它,但我必须提出一个解决方案并获得批准并分配给某人等。所以如果更改是更容易最小。
编辑 2:
我的最终建议是将班级分成两部分,如下所示:
//stub.cpp
#include <windows.h>
//Implementation of wrapper methods
//stub.h
class stub {
//public wrapper methods
}
//myfile.cpp
#include <stub.h>
#include <foo.h>
我接受 Benlitz 的回答,因为该建议还可以解决我目前面临的当前最小影响约束的问题。不过,我感谢大家的 cmets。
【问题讨论】:
标签: c++ namespaces