我正在尝试利用boost::bool_testable<>
(来自Boost.Operators)来实现类的安全bool习惯用法,但是最新版本的库(本帖子中的1.49)似乎没有再也没有了。
它去了哪里?现在有更好的替代方案,我刚刚错过了吗?
我无法使用C ++ 11,因此无法使用无需安全bool的语言扩展。
答案 0 :(得分:6)
这是一个迟到的答案,但我只是在Stack Overflow上活跃了很短的时间,我刚刚找到了你的问题。我是Boost.Operators的维护者,我removed bool_testable
早在2003年12月就可能会被意外释放。
来自T
的{{1}}课程的主问题IIRC与转化检测有关。可转换为boost::bool_testable<T>
但不转换为bool
的类应该生成int
,但是它变得模棱两可,最终导致编译失败。
还有其他问题,解决其中一个通常意味着打破另一个问题。一个示例涉及用户希望显式转换为boost::is_convertible<T,int>::value == false
和他自己的bool
的类型。
所以,长话短说,我们从来没有弄清楚如何使它足够健壮。如果有疑问,与潜在问题相比,利益太小(安全〜5行复制粘贴代码),我决定安全地使用它,因此我将其删除了。
删除之后,问题再也没有出现过,人们最终开始将Safe-Bool-Idiom代码复制粘贴到他们的类中,或者(稍后一段时间)他们开始使用operator int()
作为它变得可用。
那就是说,最好是手动复制线条。我知道这不是一个优雅的解决方案,我也不喜欢复制粘贴,但替代方案都比这更糟糕。