【问题标题】:Using declarations in private namespaces in header files在头文件的私有命名空间中使用声明
【发布时间】:2014-02-19 12:22:24
【问题描述】:

我有一个模板类,它在其方法中使用了一些增强功能。因为这个类是模板,所以它的方法应该在头文件中实现。我使用了一些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;,所以我不希望添加到详细名称空间的函数会导致任何名称冲突。我错了吗?

【问题讨论】:

    标签: c++ templates namespaces using


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      相关资源
      最近更新 更多