匿名命名空间
匿名命名空间通常用于取代老式的static函数,更加的简洁,目的明确。
老式的static关键字的语义有:
- 在某个头文件内把函数或数据声明为static则只能在此头文件与对应的源文件用这个函数,这是C语言原有的。
- 在C++中的static可以用在声明类的成员或成员函数中,表面所有的实例共享这个成员。
- 为了与C的static语义区分,C++用匿名命名空间实现了这个功能,该匿名命名空间的作用域仅在该文件(源文件)内。
- 注意不能声明匿名空间在头文件中,否则所有包含该头文件都有该匿名命名空间的不同实例(名字),原理参考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);