这个名称空间的用途是什么
What is the purpose of this namespace?
在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
的命名空间的用户代码,您应该保持警惕。
相关文章:
- 在命名空间名称之前加上 :: 是什么意思?
- 朋友定义函数的名称空间是什么
- 命名空间 Win 没有成员"simpleControl"是什么意思
- 在Visual Studio中生成的匿名命名空间变量的损坏名称的数字部分是什么意思
- 我的3D OpenGL对象围绕世界来源,而不是本地空间来源.我在做什么错或误会
- 扩展std名称空间被认为是未定义行为的原因是什么
- 在 c++ 中在命名空间内定义类的优势是什么
- 是什么阻止了用户空间程序切换到更高级别
- 二进制运算符的最佳命名空间是什么
- 这个名称空间的用途是什么
- C++中strstr()函数的时间复杂度、空间复杂度和算法是什么
- 在命名空间中定义双常量的最佳方式是什么
- STLPORT:命名空间std{}是什么意思
- 用于"augments std"的代码的命名空间是什么?
- 默认名称空间是什么
- 这个 A<B>::c( "d" ) 结构是什么意思?带有模板的名称空间?
- 当应用于命名空间范围的类时,静态是什么意思?
- 可以放在名称空间中的完整法律实体是什么?
- OpenGL函数在命名空间gl中的缺点是什么?
- std::literals::的好处是什么?内联名称空间