我有一个模板类,在它的方法中使用了一些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的函数会导致任何名称冲突。我错了吗?
答案 0 :(得分:1)
是的,这是安全的。 using声明仅将boost函数添加到detail命名空间。你基本上回答了你自己的问题: - )
编辑:还有一个想法:即使有人同时使用你的详细命名空间和boost命名空间,for_each
等仍会引用相同的函数,因此别名不会是问题。
如果名称然后与提供for_each
的其他库发生冲突,您仍然可以通过为命名空间添加前缀来消除函数的使用歧义。但如果没有人using
你的命名空间,那你没问题。