设为首页 加入收藏

TOP

4.7.3 为第三态更名
2013-10-07 15:01:33 来源: 作者: 【 】 浏览:76
Tags:4.7.3 第三 更名

4.7.3  为第三态更名

tribool库默认采用indeterminate作为第三态的名字,很清晰明确但可能有些长。因此库允许把indeterminate改变成任意用户喜欢的名字,常用的名字可以是unknown、maybe、true_or_false等等。

只需要在全局域内使用宏BOOST_TRIBOOL_THIRD_STATE就可以为第三态更名,像这样:

  1. BOOST_TRIBOOL_THIRD_STATE(unknown) 

然后我们就可以随意使用这个新名字代替原来的indeterminate:
  1. tribool tb(unknown);                            //可以作为不确定值  
  2. assert(unknown(tb));                            //可以作为检测函数  
  3. assert(unknown(tb || false));  

改名的原理很简单:

tribool默认的第三态indeterminate不是一个真正的类型值(typedef或者enum),而是一个函数,它被用来判断tribool对象内部值是否是第三态,宏BOOST_TRIBOOL_ THIRD_STATE只是定义了一个新的等价函数而已,类似这样:

  1. inline bool some_name(tribool x)   
  2. { return x.value == tribool::indeterminate_value; } 

因为宏BOOST_TRIBOOL_THIRD_STATE实质上定义了一个函数,而C++(www.cppentry.com)不允许函数嵌套,所以这个宏最好在全局域使用,它将在定义后的整个源代码中都生效。

如果把BOOST_TRIBOOL_THIRD_STATE用在一个名字空间里,那么新的第三态名字将成为名字空间的一个成员,使用时需加上名字空间限定,例如:

  1. namespace tmp_ns                                //一个临时名字空间  
  2. {  
  3.     BOOST_TRIBOOL_THIRD_STATE(unknown)  
  4. };  
  5. tribool tb(tmp_ns::unknown);                    //使用名字空间限定  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.8.6 解引用操作符 下一篇4.8.5 相等与等价

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: