在头文件中使用私有名称空间中的声明

时间:2014-02-19 12:22:25

标签: c++ templates namespaces using

我有一个模板类,在它的方法中使用了一些boost函数。因为这个类是模板,它的方法应该在头文件中实现。我使用了一些using声明来使代码更具可读性:

namespace network { 
namespace v1 {
  namespace detail {
    using boost::phoenix::if_;
    using boost::for_each;
    /* some more functions */

    template <class T>
    class Some {
      public:
        Some() {
          for_each(inVector, /* some phoenix code */);
        }
      private:
        vector<int> intVector;
    };
  }

  template <class T> using Some = detail::Some<T>;
}
}

以这种方式在标题中使用using是否安全?我不认为有人会在.cpp文件中使用using namespace network::v1::detail;,所以我不希望添加到detail namespace的函数会导致任何名称冲突。我错了吗?

1 个答案:

答案 0 :(得分:1)

是的,这是安全的。 using声明仅将boost函数添加到detail命名空间。你基本上回答了你自己的问题: - )

编辑:还有一个想法:即使有人同时使用你的详细命名空间和boost命名空间,for_each等仍会引用相同的函数,因此别名不会是问题。 如果名称然后与提供for_each的其他库发生冲突,您仍然可以通过为命名空间添加前缀来消除函数的使用歧义。但如果没有人using你的命名空间,那你没问题。