log4cplus代码片段01-无名namespace

在Properties类实现中,有一段过滤字符串空格的实现:

namespace log4cplus { namespace helpers {

namespace
{


static
int
is_space (tchar ch)
{
#if defined (UNICODE)
    return std::iswspace (ch);
#else
    return std::isspace (static_cast<unsigned char>(ch));
#endif
}


static
void
trim_leading_ws (tstring & str)
{
    tstring::iterator it = str.begin ();
    for (; it != str.end (); ++it)
    {
        if (! is_space (*it))
            break;
    }
    str.erase (str.begin (), it);
}


static
void
trim_trailing_ws (tstring & str)
{
    tstring::reverse_iterator rit = str.rbegin ();
    for (; rit != str.rend (); ++rit)
    {
        if (! is_space (*rit))
            break;
    }
    str.erase (rit.base (), str.end ());
}


static
void
trim_ws (tstring & str)
{
    trim_trailing_ws (str);
    trim_leading_ws (str);
}


} // namespace...} // namespace helpers} //namespace log4gcplus
  1. 该段代码功能分解的很彻底,

is_space判断一个字符是否是空格

trim_leading_ws去除string leading的空格

trim_trailing_ws去除string trailing的空格

trim_ws调用trim_leading_ws, trim_trailing_ws,去除leading和trailing的空格.

注意trim_trailing_ws中使用的是反向迭代器, erase的时候, 需要将其转换一下: str.erase (rit.base (), str.end ());

  1. 无名namespace的作用:

(Refer to: http://blog.csdn.net/touzani/article/details/1637776)

上面的代码中,在log4cplus和helpers namespace中,还嵌套了一个无名的namespace. is_space, trim_leading_ws, trim_trailing_ws, trim_ws都是在该无名namespace中定义的.它的作用是什么呢?

标准C++引入命名空间,除了可以避免成员的名称发生冲突之外,还可以使代码保持局部性,从而保护代码不被他人非法使用。如果目的主要是后者,而且又为替命名空间取一个好听、有意义、且与别人的命名空间不重名的名称而烦恼的话,标准C++允许定义一个无名命名空间。可以在当前编译单元中(无名命名空间之外),直接使用无名命名空间中的成员名称,但是在当前编译单元之外,它又是不可见的。

无名命名空间的定义格式为:

namespace {

...

}

实际上,上面的定义等价于:(标准C++中有一个隐含的使用指令)

namespace $$$ {

...

}

using namespace $$$;

在C浯言中可以用static声明一个函数,其作用也是使该函数的作用域限于本文件。C++保留了用static声明函数的用法,同时提供了用无名命名空间来实现这一功能。
原文链接: https://www.cnblogs.com/zhcncn/archive/2013/02/06/2904512.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/77705

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午6:06
下一篇 2023年2月9日 下午6:07

相关推荐