有没有办法限制头文件中“使用命名空间”指令的效果?

问题描述 投票:0回答:3

我喜欢 C++ 命名空间的概念,因为它们有助于保持源代码简洁,同时避免名称冲突。在 .cpp 文件中,使用“using namespace”声明,效果非常好。但是,在头文件中不能使用它,因为它“破坏了”命名空间,这意味着“使用命名空间”不仅适用于当前头文件,而且适用于此后编译的所有内容。这在一定程度上抵消了命名空间的优势。例如,考虑一个头文件,其中经常使用类“ourlib::networking::IpAddress”和“ourlib::filesystem::Path”。

有没有办法限制头文件中“using namespace”声明的效果?

c++ namespaces header-files using-directives
3个回答
4
投票

可能说,大多数经常使用::ourlib命名空间中的类,比如

namespace ourlib {
   using networking::lpAddress;
}

因此,如果它们在项目中是独一无二的,那么您很可能不会遇到问题。所以在,任意 放在标题中,您可以直接访问

lpAddress
,而无需放入 全局命名空间(我假设所有标头都在
namespace ourlib
内)


2
投票

不,这是不可能的:(


0
投票

您可以只导入单个类:

using ourlib::networking::lpAddress;

至少如果我没记错的话;)

不过,这可能仍然会污染全局命名空间。我倾向于接受头文件中的长命名空间前缀。这使得其他开发人员可以更轻松地读取头文件(因为您不必查找哪个类来自哪个命名空间)。

© www.soinside.com 2019 - 2024. All rights reserved.