我正在研究一个c ++库,它被分成多个命名空间。因为我试图避免头文件中的“using”指令,所以我不得不为变量,返回和参数做替代的“namespace :: class”。你可以想象这可能会变得混乱。所以,我尝试将using语句放在命名空间decloration中(见下文),这似乎可以解决问题,它似乎在包含此文件的文件中不可见。
namespace Project
{
namespace Utility { class A; }
namespace System
{
using Utility::A;
class B
{
A *a; // instead of Utility::A *a
};
}
}
我的问题是,这样做可以吗?
答案 0 :(得分:2)
// your header
namespace Project
{
namespace Utility { class A; }
namespace System
{
using Utility::A;
class B
{
A *a; // instead of Utility::A *a
};
}
}
// end your header
class A {};
int main()
{
using namespace Project::System;
A a;
}
test.cpp:25:5: error: reference to 'A' is ambiguous
A a;
^
test.cpp:20:7: note: candidate found by name lookup is 'A'
class A {};
^
test.cpp:9:20: note: candidate found by name lookup is 'Project::System::A'
using Utility::A;
^
1 error generated.
答案 1 :(得分:1)
如果没别的话,那就不那么糟了。
另一方面,我认为在使用全名时拼写全名并不“麻烦”。对我而言,这只会增加代码的清晰度。
答案 2 :(得分:0)
命名空间可以像其他任何东西一样被过度使用。如果您的代码由于命名空间而变得混乱,那么很好地表明您可能过度使用它们。
如果使用命名空间来分隔独立域,则不应过于频繁地指定它们。