C++ 安全 boolean 包装器

标签 c++ boolean safe-bool-idiom

我正在尝试设计一个 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/

相关文章:

c++ - 安全 bool 多重转换歧义

c++ - 安全 bool 习语和显式运算符 bool 之间的不兼容性

C++ safe boolean idiom 不能用 Visual C++ 10(2010) 编译

c++ - 为什么调用成员函数就好像它是静态的(当它不是)在 C++ 中工作?

c++ - DX11 丢失实例缓冲区数据

c++ - C++解析命令行参数和 boolean

python - 如何将 boolean 参数传递给结构命令

C++ 模板参数 T(*)[]

c++ - 为特定时间快速搜索音符建模音乐(音符)的最佳方式

c# - C#中三元运算符报错: Only assignment, call, increment, decrement, new object expressions可以作为语句使用