使用命名空间:方便性与命名空间污染

时间:2014-08-22 07:55:35

标签: c++ templates stl namespaces

我正在使用<chrono>编写一个简单的秒表模板。由于这些函数位于std::chrono中,因此编写using namespace std::chrono以避免膨胀我的代码行会很方便。但由于它是一个模板,因此std::chrono将在包含该模板的所有文件中可见。

在这种情况下我该怎么办?我是否必须选择其中一个选项,或者是否有办法避免这两个选项的问题?

1 个答案:

答案 0 :(得分:3)

您可以在代码中使用命名空间别名:

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 {之间发生冲突{1}}名称空间。

std