是boost :: bool_testable<>搬迁还是拆除?

时间:2012-05-07 23:50:01

标签: c++ boost safe-bool-idiom

我正在尝试利用boost::bool_testable<>(来自Boost.Operators)来实现类的安全bool习惯用法,但是最新版本的库(本帖子中的1.49)似乎没有再也没有了。

它去了哪里?现在有更好的替代方案,我刚刚错过了吗?

我无法使用C ++ 11,因此无法使用无需安全bool的语言扩展。

1 个答案:

答案 0 :(得分:6)

这是一个迟到的答案,但我只是在Stack Overflow上活跃了很短的时间,我刚刚找到了你的问题。我是Boost.Operators的维护者,我removed bool_testable早在2003年12月就可能会被意外释放。

几周前,Sam Partington提出了这个建议,并将其添加到CVS存储库中。它在一开始看起来很有希望,但很快就会出现问题。

来自T的{​​{1}}课程的问题IIRC与转化检测有关。可转换为boost::bool_testable<T>但不转换为bool的类应该生成int,但是它变得模棱两可,最终导致编译失败。

还有其他问题,解决其中一个通常意味着打破另一个问题。一个示例涉及用户希望显式转换为boost::is_convertible<T,int>::value == false 他自己的bool的类型。

所以,长话短说,我们从来没有弄清楚如何使它足够健壮。如果有疑问,与潜在问题相比,利益太小(安全〜5行复制粘贴代码),我决定安全地使用它,因此我将其删除了。

删除之后,问题再也没有出现过,人们最终开始将Safe-Bool-Idiom代码复制粘贴到他们的类中,或者(稍后一段时间)他们开始使用operator int()作为它变得可用。

那就是说,最好是手动复制线条。我知道这不是一个优雅的解决方案,我也不喜欢复制粘贴,但替代方案都比这更糟糕。