我会拒绝第一个(编辑:问题改变了,第一个也是我现在更喜欢的)。由于仅从函数定义来看,尚不清楚 Bar 指的是哪里。此外,使用您的第一种方法,可能会出现滑溜的错误:
namespace bar {
struct foo { void f(); };
}
namespace baz {
struct foo { void f(); };
}
using namespace bar;
using namespace baz;
void foo::f() { // which foo??
}
因为它在当前范围内查找(那里是全局范围),所以它找到了两个 foo,并告诉您对它的引用是不明确的。
我个人会这样做:
namespace foo {
void Bar::SomeMethod() {
// something in here
}
}
仅查看 SomeMethod 的定义也不清楚它属于哪个名称空间,但是您有一个名称空间范围围绕它,您可以轻松查找它。此外,现在很清楚 Bar 指的是命名空间 foo。
你展示的第二种方式实际上对我来说打字太多了。此外,第二种方式可能会在您的代码的新读者中引起混淆: foo 是类,而 Bar 是它的嵌套类吗?还是 foo 是命名空间而 Bar 是类?