我想利用boost::bool_testable<>
从Boost.Operators)来实现的一类安全布尔成语,但最近图书馆的版本(1.49为这篇文章的)似乎并没有把它了。
它到哪里去了? 是否有可用的一个更好的选择,现在,我只是错过了?
我不能够使用C ++ 11,因此不能使用语言扩展,使安全布尔不必要的。
我想利用boost::bool_testable<>
从Boost.Operators)来实现的一类安全布尔成语,但最近图书馆的版本(1.49为这篇文章的)似乎并没有把它了。
它到哪里去了? 是否有可用的一个更好的选择,现在,我只是错过了?
我不能够使用C ++ 11,因此不能使用语言扩展,使安全布尔不必要的。
这是一个迟到的回答,但我只是很活跃的堆栈溢出的时间很短,我刚发现你的问题。 我Boost.Operators的维护者和我取出 bool_testable
在2003年12月回到它可能accidentially被释放。
萨姆·帕廷顿提出的这几个星期前,我把它添加到CVS仓库。 它在一开始看起来前途无量,但很快问题在某些scenarious露面。
主要的问题,IIRC,一类T
衍生自boost::bool_testable<T>
有与转换检测做。 一类是可转换为bool
,而不是int
,应该产生boost::is_convertible<T,int>::value == false
,但相反,它成为暧昧与你结束了一个编译失败。
此外,还有其他的问题,解决这些问题的一个通常意味着打破另一个。 一个例子涉及哪些类型的用户想要显式转换到bool
和他自己的operator int()
所以,长话短说,我们从来没有想出如何使它足够强大。 如有疑问,好处太小(复制粘贴代码安全〜5行)与潜在问题相比,我决定发挥它的安全,所以我删除它。
它被删除后,这个问题再也没有上来,人们终于开始或者复制粘贴安全-布尔-成语代码到他们的课程,或(一段时间后),他们开始使用explicit operator bool()
因为它变得可用。
这就是说,它是最好的,如果你只是手动复制线。 我知道这是不是一个完美的解决方案,我不喜欢复制粘贴下去,但替代品都是比这更糟糕。