使用名字空间成员

 我们总用限定修饰的名字形式namespace_name::member_name来引用名字空间成员, 但这种作法往往比较麻烦, 尤其是当名字空间成员很长的时候。为了使名字空间成员使用更方面, 我们用以下三种方式来克服名字空间使用上的不便之处。

 

1. 名字空间别名:

    即用一个较短的同义词与一个名字空间名关联起来, 如:

   namespace WindowsToolKit::DLCLib::LCMemory { // ... }

   namespace DLCMem = WindowsToolKit::DLCLib::LCMemory;

 

   利用名字空间别名也可以引用嵌套的名字空间, 如:

 

  // 短别名
  namespace mlib = cplusplus_primer::MatrixLib;
  // 较易读
  void func( mlib::matrix &m )
  {
     // ...
     mlib::inverse( m );
  }

 

  一个名字空间可以有许多同义词或别名且所有别名和原来的名字空间名都可以交替使用, 如:

   // Lib指向名字空间 cplusplus_primer::MatrixLib
   namespace alias = Lib;
   void func( Lib::matrix &m )

   {
       // ...
      alias::inverse( m );
   }

 

 

 

2. using 声明

    using 声明以关键字using 开头后面是名字空间成员名using 声明中的成员名必须是限定修饰名, 例如:

    namespace cplusplus_primer {
         namespace MatrixLib {
             class matrix { /* ... */ };
             // ...
            }
    }


    // 名字空间成员 matrix 的 using 声明
    using cplusplus_primer::MatrixLib::matrix;

 

   在遇到using 声明之后在全局域中或其嵌套的域中使用matrix 都将引用该名字空间成员。

 

   与其他声明一样using 声明引入的名字有以下特性:

   1)  它在该域中必须惟一
   2)  由外围域中的声明引入的相同名字被其隐藏
   3)  它被嵌套域中的相同名字的声明隐藏

 

 

3. using 指示符

   我们可以使用using 声明使库中的名字变成可见的, 如果库非常大且应用程序使用了库中许多的名字,

   则翻需要使用大量的using 声明, 而且往往容易漏掉且容易出错, using 指示符可以用来解决这个问题。

 

    using 指示符允许我们让来自特定名字空间的所有名字的简短形式都可, 如:

 

    // using 指示符: cplusplus_primer 的所有成员都变成可见的
    using namespace cplusplus_primer;

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值