问题标签 [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.
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。
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) {}
c++ - 安全布尔多次转换歧义
为了支持没有explicit
关键字的编译器(例如 MSVC 2012),我必须实现安全的 bool 习惯用法。应该可以检查 bool 的类正在建模指向许多类的指针,因此它应该可以转换为这些指针。下面的代码说明了这个想法:
如果我们使用explicit operator bool()
-based 实现一切正常。问题实际上在于基于“安全布尔”的实现中的模棱两可的可转换性。应该如何解决?
注意:考虑 bool 转换实现独立于其他指针转换实现。如果不可能,请告诉我如何在相关情况下实现它,例如,如果Convertible
其他转换运算符之一返回非空值,则计算结果为真。
UPD:我相信有一种方法可以使一个隐式转换比其他所有转换都更可取。
c++ - 模板特化中受保护的成员访问错误
错误信息:
我想知道为什么在模板专业化中无法访问受保护的成员。这些代码毫无意义,仅用于测试。
c++ - C++ 安全布尔包装器
我正在尝试设计一个应用安全 bool idiom的bool 包装器结构。
解决这个问题的经典实现非常简单:骨架可能是这样的:
我要改进的部分是如何Bool
构建。
例如,我想通过设计避免隐式缩小:
我试图使用模板伤害自己,但没有成功。
我怎样才能让它工作?