编辑:我知道方法1本质上是无效的,可能会使用方法2,但是我正在寻找最好的方法或更好的解决方案来减轻猖,、可变的 namespace 扩散。
我在一个 namespace 中有多个类或方法定义,它们具有不同的依赖关系,并希望使用最少的 namespace 块或显式作用域,但同时将#include指令与需要它们的定义分组在一起。我从未见过任何迹象表明可以告诉任何预处理器从#include内容中排除 namespace {}范围,但是我在这里问是否有可能这样做:(请参阅底部,了解为什么我想要死掉的东西简单)
// 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
...
// over this:
#include "apple.h"
#include "banana.h"
#include "blueberry.h"
namespace Foo {
B *A::blah(B const *x) { /* ... */ }
int B::whatever(C const &var) { /* ... */ }
void B::something() { /* ... */ }
} // namespace Foo
...
// or over this:
#include "apple.h"
namespace Foo {
B *A::blah(B const *x) { /* ... */ }
} // namespace Foo
#include "banana.h"
namespace Foo {
int B::whatever(C const &var) { /* ... */ }
} // namespace Foo
#include "blueberry.h"
namespace Foo {
void B::something() { /* ... */ }
} // namespace Foo
我真正的问题是我有一些项目,其中的模块可能需要分支,但是在同一程序中分支中的组件并存。我有诸如FooA之类的类,我将其称为Foo::A,希望能够像Foo::v1_2::A那样轻松地进行分支,其中某些程序可能同时需要Foo::A和Foo::v1_2::A。我希望“Foo”或“Foo::v1_2”每个文件只显示一次,如果可能的话,作为单个命名空间块显示。此外,我倾向于将#include指令的块放在需要它们的文件中第一个定义的紧上方。我最好的选择是什么,或者应该怎么做而不是劫持 namespace ?
最佳答案
只需将#include视为将包含文件的内容复制并粘贴到#include指令的位置即可。
这意味着,是的,包含文件中的所有内容都将在 namespace 内。
关于c++ - 在 namespace {}块中屏蔽#include?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2868955/