我正在尝试设计一个 bool 包装器 结构应用 safe bool idiom。
解决这个问题的经典实现非常简单:骨架可能是这样的:
struct Bool final
{
Bool() = default;
Bool(bool value)
: _value{value}
{}
explicit operator bool() const {
return _value;
}
private:
bool _value{false};
};
我要改进的部分是 Bool
的构造方式。
例如,我想通过设计避免隐式缩小:
Bool b1(45); // yields warnings, but it compiles
Bool b2{3}; // not ok by standard
我尝试使用模板伤害自己,但没有成功。
我怎样才能让它工作?
最佳答案
您可以通过显式删除所有其他构造函数来实现此目的。
struct Bool final
{
template<class T>
Bool(T) = delete;
Bool(bool value);
};
关于C++ 安全 boolean 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41684654/