匿名命名空间

匿名命名空间通常用于取代老式的static函数,更加的简洁,目的明确。
老式的static关键字的语义有:

  1. 在某个头文件内把函数或数据声明为static则只能在此头文件与对应的源文件用这个函数,这是C语言原有的。
  2. 在C++中的static可以用在声明类的成员或成员函数中,表面所有的实例共享这个成员。
  3. 为了与C的static语义区分,C++用匿名命名空间实现了这个功能,该匿名命名空间的作用域仅在该文件(源文件)内。
  4. 注意不能声明匿名空间在头文件中,否则所有包含该头文件都有该匿名命名空间的不同实例(名字),原理参考google。

应用的实例:

// a.h

using ECKeyUptr=std::unique_prt<ECKey,void(*)(ECKey*)>;

//a.cc
namespace
{
auto Deleter=[](ECKey* key){
    ECKey_Free(key);
}
}

auto ptr=ECKeyUptr(new key,Deleter);
posted @ 2021-11-04 17:02  manch1n  阅读(681)  评论(0编辑  收藏  举报