这个命名空间的目的是什么?

时间:2014-11-03 19:15:03

标签: c++ c++11 boost c-preprocessor inline-namespaces

在Boost 1.55中,current_function.hpp读取的内容如下:

namespace boost
{
namespace detail
{
inline void current_function_helper()
{

#if defined(__GNUC__) || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) || (defined(__ICC) && (__ICC >= 600)) || defined(__ghs__)

# define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__

#elif ...

#endif

}    
} // namespace detail
} // namespace boost

为什么作者甚至不打算写这些命名空间?

1 个答案:

答案 0 :(得分:3)

detail命名空间有助于避免使用用户不需要知道的内部函数或类来污染官方命名空间。

现代IDE解析Header文件并提供代码完成,即如果您开始编写boost::c之类的内容,则会提供名称建议。如果内部算法,例如,例如,那将是非常不可用的。还会列出copy_pod_nontrivial

此外,拼写错误可能导致调用内部函数或声明内部类类型的对象。这绝对不是我们想要的。

更为技术性的原因是ADL:某些函数是通过其参数类型找到的(函数模板的模板参数也包含在内);这可能导致名称查找以在官方命名空间中搜索名称。如果在其中声明了辅助函数(或类),则可能会导致重载解析出现问题。

用户永远不应该(需要)使用这些内部函数,因此如果您看到用户代码访问类似detail的命名空间,您应该保持警惕。