fbr*_*eto 2 c++ boost safe-bool-idiom
我正在尝试利用boost::bool_testable<>(来自Boost.Operators)为类实现安全bool习语,但是最新版本的库(此帖子中的1.49)似乎不再具有它.
它去了哪里?现在有更好的替代方案,而我错过了吗?
我无法使用C++ 11,因此无法使用不需要安全bool的语言扩展.
这是一个迟到的答案,但我只是在Stack Overflow上活跃了很短的时间,我刚刚找到了你的问题.我是Boost.Operators的维护者,我在2003年12月将其删除 bool_testable,然后才意外发布.
几周前Sam Partington提出了它,我将它添加到CVS存储库中.它在一开始看起来很有希望,但很快就会出现问题.
IIRC 的主要问题T来自于boost::bool_testable<T>转换检测.一个可以转换为bool但不int应该转换的类boost::is_convertible<T,int>::value == false,但是它变得模棱两可,最终导致编译失败.
还有其他问题,解决其中一个通常意味着打破另一个问题.一个例子涉及哪些类型的用户想要显式转换到bool 和自己operator int().
所以,长话短说,我们从来没有弄清楚如何使它足够健壮.如果有疑问,与潜在的问题相比,利益太小(安全〜5行复制粘贴代码),我决定安全地使用它,因此我删除了它.
删除之后,问题再也没有出现过,人们最终开始将Safe-Bool-Idiom代码复制粘贴到他们的类中,或者(一段时间之后)他们开始使用它们explicit operator bool().
也就是说,最好是手动复制线条.我知道这不是一个优雅的解决方案,我也不喜欢复制粘贴,但替代方案都比这更糟糕.