使用名称空间:便利与名称空间污染
using namespace: Convenience vs. namespace pollution
我正在使用<chrono>
编写一个简单的秒表模板。由于这些函数在std::chrono
中,因此编写using namespace std::chrono
将很方便,以避免使我的代码行膨胀。但是因为它是一个模板,所以std::chrono
在所有包含该模板的文件中都是可见的。
您可以在代码中使用名称空间别名:
namespace bc = boost::chrono;
和使用
bc::duration d;
你可以把这个别名放在你需要boost::chrono
的函数中,这样它们就不会污染其他代码。
template<T>
class foo {
void bar() {
namespace bc = boost::chrono;
bc::duration d;
}
// namespace alias bc is no longer in scope.
}
或者,您可以将using namespace
放在模板/函数的范围内,但是,我认为这会降低可读性,并可能导致boost
和C++11
std
命名空间之间的冲突。
template<T>
class foo {
void bar() {
using namespace boost::chrono;
duration d;
}
// using namespace boost::chrono is no longer in scope.
}
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- OpenGL相机和相机空间转型的困惑
- CUDA内核和数学函数的显式命名空间
- 打印第二列时的2d字符矢量打印空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 了解带有命名空间污染的 TOTW 153 示例
- 如何使用 windbg "dt"命令从命名空间污染的内存转储中获取信息
- 限制C 标头中的名称空间污染
- Java 或 C# 中是否存在命名空间污染(如 C++ 中)
- C++变量的重新定义,全局命名空间被污染,我不知道为什么
- 使用名称空间:便利与名称空间污染
- 标准头文件污染了全局命名空间