这个名称空间的用途是什么

What is the purpose of this namespace?

本文关键字:是什么 空间      更新时间:2023-10-16

在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

为什么作者还要写那些名称空间?

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

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

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

一个更技术性的原因是ADL:一些函数是根据其参数的类型找到的(也涉及函数模板的模板参数);这可能导致名称查找在官方名称空间中搜索名称。如果在其中声明了辅助函数(或类),这可能会导致重载解决问题。

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