这或多或少都是考虑语法语义的一个相当简单的问题。
我在命名空间中有一个类,它使用了另一个命名空间中的很多类:
namespace SomeNamespace
{
class MyClass
{
//...
//These types of namespace uses occur alot around here:
void DoSomething(const anothernamespace::anotherclass &arg);
//...
}
}
这个类当然是在它自己的.hpp文件中。
我想将名称空间“anothernamespace”中的所有内容都用于MyClass类,但是,如果我只是这样说:
namespace SomeNamespace
{
using namespace anothernamespace;
class MyClass
{
//...
//These types of namespace uses occur alot around here:
void DoSomething(const anothernamespace::anotherclass &arg);
//...
}
}
任何人
using namespace SomeNamespace;
将自动使用anothernamespace - 这是我想要避免的。
我如何实现我的目标?
答案 0 :(得分:6)
最简单的非完美但有帮助的解决方案是使用命名空间别名:
namespace SomeNamespace
{
namespace ans = anothernamespace; // namespace alias
class MyClass
{
//...
//These types of namespace uses occur alot around here:
void DoSomething(const ans::anotherclass &arg);
//...
}
}
您的类用户不会“使用命名空间anothernamespace;”,使其更安全,但您仍然必须在类中使用别名。不确定它有什么帮助,这取决于你是否只想输入更少或者隐藏类型。在这里,您将完整的命名空间放在一种子命名空间中,该子命名空间不会进入用户的命名空间,但仍然可用。
否则......没有办法完全按照自己的意愿行事。使用命名空间在类声明中不起作用。
答案 1 :(得分:3)
这就是你想要的。两个名称空间都可供MyClass访问。 using namespace
在标题中是不好的做法。
namespace SomeNamespace {
namespace other {
using namespace anothernamespace;
class MyClass {
};
}}
namespace SomeNamepace {
typedef other::MyClass MyClass;
}
您真的应该更喜欢在类声明中指定anothernamespace ::。
答案 2 :(得分:2)
你做不到。就这么简单,我很害怕。