将#include包装在命名空间块中是个好主意吗?

R. *_*des 40 c++ namespaces include

我有一个C头,编写为C和C++编译(它只使用公共子集中的功能,并使用该extern "C"东西).

问题是,该头部在全局命名空间中声明了东西.我宁愿通常的原因避免这种情况.我想过这样做:

namespace foo {
#include <foo.h>
}
Run Code Online (Sandbox Code Playgroud)

这样做是个好主意吗?我是否有不包含编辑头文件的替代方法?

Fre*_*Foo 44

不,这是个坏主意.使用C++声明时,由于标识符在错误的命名空间中声明,因此可能会引入链接器错误.使用C声明,它可以工作,但它可能会隐藏全局命名空间中的标识符之间的冲突(我猜你试图避免)直到链接时间; 它并没有真正将标识符放在命名空间中.

更好的想法是将自己的标识符放在命名空间中,并避免main在全局标识符中定义任何内容.


Che*_*Alf 5

<windows.h>在1990年代后期,我做过这种"把它置于命名空间" .

虽然没有完全的支持:它的原则是在我需要时为我需要的任何下一步添加支持.

做这项工作的关键是检查包含哪些C库头,并确保首先包含它们.它归结为4个这样的标题,IIRC.不过,微软对宏的喜爱使事情变得困难.

因此,它可以在实践中针对C头(或C++限制为类C子集)进行,但是以每个新版本的包装更新包装器为代价,这是不切实际的和/或非常昂贵的.更不用说费力了.

总之,不,这不是一个好主意.:-)

从经验谈起.