我喜欢 C++ 命名空间的概念,因为它们有助于保持源代码简洁,同时避免名称冲突。在 .cpp 文件中,使用“using namespace”声明,效果非常好。但是,在头文件中不能使用它,因为它“破坏了”命名空间,这意味着“使用命名空间”不仅适用于当前头文件,而且适用于此后编译的所有内容。这在一定程度上抵消了命名空间的优势。例如,考虑一个头文件,其中经常使用类“ourlib::networking::IpAddress”和“ourlib::filesystem::Path”。
有没有办法限制头文件中“using namespace”声明的效果?
你可能说,大多数经常使用::ourlib命名空间中的类,比如
namespace ourlib {
using networking::lpAddress;
}
因此,如果它们在项目中是独一无二的,那么您很可能不会遇到问题。所以在,任意 放在标题中,您可以直接访问
lpAddress
,而无需放入
全局命名空间(我假设所有标头都在namespace ourlib
内)
不,这是不可能的:(
您可以只导入单个类:
using ourlib::networking::lpAddress;
至少如果我没记错的话;)
不过,这可能仍然会污染全局命名空间。我倾向于接受头文件中的长命名空间前缀。这使得其他开发人员可以更轻松地读取头文件(因为您不必查找哪个类来自哪个命名空间)。