试图找到一个“简单易用”的safe_bool成语/实现,我已经结束了我自己的。评论:可重用的safe_bool实现
问:这个实现是否正确?
template <typename T>
class safe_bool
{
protected:
typedef void (safe_bool::*bool_type)() const;
bool_type to_bool_type(bool b) const
{ return b ? &safe_bool<T>::safe_bool_true : 0; }
private:
void safe_bool_true() const {}
private:
bool operator ==(safe_bool<T> const & rhs);
bool operator !=(safe_bool<T> const & rhs);
};
使用这样的:
struct A : public safe_bool<A>
{
// operator bool() const { return true; }
operator bool_type() const { return to_bool_type(true); }
};
唯一除了现有的基类是to_bool_type
,但我希望我已经得到了一切正确的,太。
我使用的测试用例(VC9)can be found here。
我在实现中看到的缺点:bool_type
和to_bool_type
在派生类中可见,这可能不适用于所有人。另外,使用错误的模板参数(例如,在复制和粘贴期间引入的class B : public safe_bool<A>
)将不被注意。
谢谢 - 这个链接实际上是我开始的地方。我对他们的实施有一些怀疑,这就是为什么我不相信每一个iota。似乎缺少的是防止'operator ==(safe_bool)' - 但在这种情况下,这将是必要的? ----我同意复杂性与有用性评分,我的尝试是让它“减少伤害”。 –
peterchen
2010-01-12 19:53:24
因为safe_bool“正常工作”,所以Downvoting尤其适用,如果您将其包装在一个很好记录的可重用组件中。也就是说,在C++ 11中,只需使用'explicit operator bool()const'并使用它:-) – 2011-12-11 12:28:21