【发布时间】:2012-12-18 04:07:48
【问题描述】:
在这种情况下
namespace n {
void f() {
void another_function();
}
}
函数another_function应该定义在命名空间n内部还是外部? VS 2012(带有November CTP)说它应该在外面,而Mac上的GCC 4.7.2说它应该在里面。如果我做错了,我会从链接器中得到未定义的符号错误。
我通常相信 GCC 更符合标准,但这是 C++,你永远无法确定。
【问题讨论】:
-
你为什么要这么做?
-
@BillyONeal 因为
another_function是一个实现细节,f是一个模板。 -
但是在
f中声明another_function并不比f更不可见。如果有人碰巧定义了自己的n::another_function,它只会导致多个定义错误。 -
@BillyONeal 没有客户会/不应该将东西放入我的命名空间,因为它是一个库。它确实使它稍微不那么明显,因为他们必须努力获得原型。有没有更好的方法?
-
我只是将原型放在
your_namespace::detail中。无论如何,这就是 boost 在这些情况下所做的。约定是命名空间detail内的任何内容都是实现细节。
标签: c++ namespaces function-declaration