我有一个C头,编写为C和C++编译(它只使用公共子集中的功能,并使用该extern "C"东西).
问题是,该头部在全局命名空间中声明了东西.我宁愿通常的原因避免这种情况.我想过这样做:
namespace foo {
#include <foo.h>
}
Run Code Online (Sandbox Code Playgroud)
这样做是个好主意吗?我是否有不包含编辑头文件的替代方法?
编辑:我知道方法1本质上是无效的,可能会使用方法2,但我正在寻找最好的黑客或更好的解决方案来缓解猖獗的,可变的命名空间扩散.
我在一个名称空间中有多个具有不同依赖关系的类或方法定义,并且希望尽可能使用最少的命名空间块或显式scopings,但是将#include指令与尽可能最好的需要的定义分组.我从来没有看到任何迹象表明可以告诉任何预处理器从#include内容中排除命名空间{}作用域,但我在这里询问是否有类似的东西是可能的:(见底部解释为什么我想要死的东西简单)
// NOTE: apple.h, etc., contents are *NOT* intended to be in namespace Foo!
// would prefer something most this:
#pragma magic_namespace_backout(1) // FIXME: use actually existing directive
namespace Foo {
#include "apple.h"
B *A::blah(B const *x) { /* ... */ }
#include "banana.h"
int B::whatever(C const &var) { /* ... */ }
#include "blueberry.h"
void B::something() { /* ... */ }
} // namespace Foo
Run Code Online (Sandbox Code Playgroud)
...
// over this:
#include "apple.h"
#include "banana.h"
#include "blueberry.h"
namespace Foo { …Run Code Online (Sandbox Code Playgroud)