我有时在嵌套的命名空间声明类和当涉及到确定其成员函数,我不希望有资格每一个与这些嵌套的命名空间名称,特别是如果他们长期ISH 。定义命名空间成员VS免费功能无资质
在我定义成员函数之前添加“using namespace”(或者,为了更精确地定位,使用:: SomeClass),似乎不需要限定每个定义,但我无法找到规范中的任何位置这保证了这一点,我担心这可能是一种只适用于GCC的行为。我注意到,在定义自由函数(?)时,似乎没有类似的机制来跳过添加限定符的需要。
至于我的意思的例子:
页眉:
// example.h
namespace SomeNamespace
{
class SomeClass
{
public:
void someMemberFunction();
};
void someFreeFunction();
};
实现:
// example.cpp
#include "example.h"
using namespace SomeNamespace;
void SomeClass::someMemberFunction()
{
// OK: seems to define SomeNamespace::SomeClass::someMemberFunction(),
// even though we didn't qualify it with SomeNamespace::
}
void someFreeFunction()
{
// Not what we wanted; declares and defines ::someFreeFunction(), not
// SomeNamespace::someFreeFunction() (quite understandably)
}
int main()
{
SomeClass a;
a.someMemberFunction(); // Ok; it is defined above.
SomeNamespace::someFreeFunction(); // Undefined!
return 0;
}
所以我的问题:是definining SomeClass的:: someMemberFunction上述方式()合法,并在规范中提到这一点?如果合法,这是可取的吗?它确实减少了杂乱! :)
非常感谢:)
只是出于兴趣:什么是问题把这些定义放在一个常规的“命名空间”中? (就像你对声明做的那样) – ereOn
只要你没有在头文件中使用'namespace ...',你应该没问题。无论如何,这就是'using'指令的用例。 – RedX