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在全局标识符中定义任何内容.
<windows.h>在1990年代后期,我做过这种"把它置于命名空间" .
虽然没有完全的支持:它的原则是在我需要时为我需要的任何下一步添加支持.
做这项工作的关键是检查包含哪些C库头,并确保首先包含它们.它归结为4个这样的标题,IIRC.不过,微软对宏的喜爱使事情变得困难.
因此,它可以在实践中针对C头(或C++限制为类C子集)进行,但是以每个新版本的包装更新包装器为代价,这是不切实际的和/或非常昂贵的.更不用说费力了.
总之,不,这不是一个好主意.:-)
从经验谈起.