使用名称空间:便利与名称空间污染

using namespace: Convenience vs. namespace pollution

本文关键字:空间 污染      更新时间:2023-10-16

我正在使用<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放在模板/函数的范围内,但是,我认为这会降低可读性,并可能导致boostC++11 std命名空间之间的冲突。

template<T>
class foo {
    void bar() {
        using namespace boost::chrono;
        duration d;
    }
    // using namespace boost::chrono is no longer in scope.
}