C++ 命名空间是可以嵌套的,且嵌套了多少次空间,其就可谓有多少「维」,然而同一个有限的标识符集合在空间中就变得越来越稀疏;命名空间可以并列,从长远来看标识符会变得很多,顾及起来一样不胜其烦。这时 可以用 using 声明来安全降维,减少代码复杂度。
我最近就在 Caffe 学到了这么一种手法:
namespace caffe { using boost::shared_ptr; }
它直接把 boost::shared_ptr
嵌进了命名空间 caffe
, 现在我们只要知道有 caffe::shared_ptr
这么一个 ABI 接口存在,不用再纠结它是 std
或 boost
中的哪一个了。 接口使用者无需过多操心智能指针的管理,开发者也有章可循,多好。
话说回来,using 声明可谓只在原线性空间增加了一个有效的基向量, using 指示却相当于直接把多个线性空间喀嚓地合并起来 ,容易变得线性有关,即标识符产生歧义。高下立判,小用 using 声明怡情,强用 using 指示灰飞烟灭。
Written with StackEdit .