问题标签 [safe-bool-idiom]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2459 浏览

c++ - boost中的安全布尔成语?

boost 库是否提供了一个安全的 bool 习惯用法的实现,以便我可以从中派生我的类?

如果是 - 它在哪里?

如果不是 - 除了自己实施之外,我还有哪些选择?


我发现了以下类似的问题:“在 boost 中是否有一个安全的 bool idiom helper? ”并且公认的答案建议bool_testable<>Boost.Operators中使用。

不幸的是,当我查看boost 手册时,我在那里找不到它。使用它的代码也无法编译。

我还偶然发现了另一个 SO 问题“ boost::bool_testable<> 是否已重新定位或删除? ”那里的评论表明bool_testable实际上从未对任何版本的 boost 进行过修改。

Bjorn Karlsson也有一篇关于该主题的有趣文章,其中包含可以复制粘贴到我的项目中的代码。然而,我希望有一个普遍接受和维护的实用程序库(例如 boost)已经实现了它。


出于兼容性原因,我不想依赖 C++11。

0 投票
0 回答
87 浏览

c++ - 单元测试安全布尔成语

一个类应该提交给哪些单元测试以保证它具有 C++ 安全布尔习语所需的所有属性?

尝试命名所有这些(从Safe Bool Idiomtest中提取),对于一个据称实现了 safe-bool 成语的类的实例Test,它应该启用以下构造:

  • if (test) { /* test is valid */ }
  • if (!test) { /* test is not valid */ }

...并禁止以下构造:

  • test << 1;
  • int i = test;
  • delete test;
  • if (test1 == test2) {}
  • if (test != test2) {}
0 投票
2 回答
101 浏览

c++ - 安全布尔多次转换歧义

为了支持没有explicit关键字的编译器(例如 MSVC 2012),我必须实现安全的 bool 习惯用法。应该可以检查 bool 的类正在建模指向许多类的指针,因此它应该可以转换为这些指针。下面的代码说明了这个想法:

如果我们使用explicit operator bool()-based 实现一切正常。问题实际上在于基于“安全布尔”的实现中的模棱两可的可转换性。应该如何解决?

注意:考虑 bool 转换实现独立于其他指针转换实现。如果不可能,请告诉我如何在相关情况下实现它,例如,如果Convertible其他转换运算符之一返回非空值,则计算结果为真。

UPD:我相信有一种方法可以使一个隐式转换比其他所有转换都更可取。

0 投票
1 回答
830 浏览

c++ - 模板特化中受保护的成员访问错误

错误信息:

我想知道为什么在模板专业化中无法访问受保护的成员。这些代码毫无意义,仅用于测试。

0 投票
4 回答
3801 浏览

c++ - C++ 安全布尔包装器

我正在尝试设计一个应用安全 bool idiom的bool 包装器结构。 解决这个问题的经典实现非常简单:骨架可能是这样的:

我要改进的部分是如何Bool构建。
例如,我想通过设计避免隐式缩小:

我试图使用模板伤害自己,但没有成功。

我怎样才能让它工作?