名字空间别名namespace alias 允许用一个可替代的短的或更一般的名字与一个现
有的名字空间关联起来。例如
// 提供一个更一般化的别名
namespace LIB = IBM_Canada_Laboratory;
// 提供一个更短的别名
namespace DFA = Disney_Feature_Animation;
然后,这个别名就可以用作原始名字空间的同义词。例如
#include "IBM_Canada.h"
namespace LIB = IBM_Canada_Laboratory;
int main()
{
LIB::Array<int> ia(1024);
// ...
}
别名也可以用来封装正在使用的实际名字空间。例如,在此情形下,我们可以通过改变
分配给别名的名字空间来改变所使用的声明集而无需改变通过别名访问这些声明的
实际代码。例如
namespace LIB = Cplusplus_Primer_3E;
int main()
{
// 在这种情况下下面的声明无须改变
LIB::Array<int> ia(1024);
// ...
}
但是,如果要让这项技术在实际工作中发挥作用,那么两个名字空间中的声明必须提供
同样的接口。例如,下面的代码就不能工作,因为Disney 的Array 类需要一个类型参数和一
个数组长度参数。
namespace LIB = Disney_Feature_Animation;
int main()
{
// 不再是一个有效的声明
LIB::Array<int> ia(1024);
// ...
}
程序员常常希望在访问名字空间内声明的名字时不加限定修饰符,即使我们已经为名字
空间标识符提供了较短的别名,在每次访问该名字空间内声明的名字时,也都要进行限定,还
是太麻烦。using 指示符using directive 使名字空间内的所有声明都可见,这样这些声明
能够不加限定地使用。例如
#include "IBM_Canada_Laboratory.h"
// 使所有的名字都可见
using namespace IBM_Canada_Laboratory;
int main()
{
// ok: IBM_Canada_Laboratory::Matrix
Matrix mat( 4,4 );
// ok: IBM_Canada_Laboratory::Array
Array<int> ia( 1024 );
// ...
}
using 与namespace 都是关键字,被引用的名字空间必须已经被声明了,否则,会引起编译
错误。