- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有一个技巧可以让安全的 bool 习语完全起作用,而不必从执行实际实现的类派生?
对于“完全工作”,我的意思是该类具有一个运算符,允许以安全的方式对其进行测试,就好像它是一个 boolean 值一样:
MyTestableClass a;
MyOtherTestableClass b;
//this has to work
if( a );
if( b );
//this must not compile
if( a == b );
if( a < b );
int i = a;
i += b;
例如使用此实现时
struct safe_bool_thing
{
int b;
};
typedef int safe_bool_thing::* bool_type;
safe_bool( const bool b ) { return b ? &safe_bool_thing::b : 0; }
class MyTestableClass
{
operator bool_type () const { return safe_bool( someCondition ); }
}
几乎没问题,除了 a == b 仍然可以编译,因为可以比较成员指针。与上面相同的实现,但使用指向成员函数的指针而不是指向成员变量的指针具有完全相同的问题。
已知的完美运行的实现(例如 here 或 boost 中使用的 safe_bool)要求可测试类派生自提供实际运算符实现的类。
我实际上认为没有办法解决它,但不完全确定。我尝试了一些看起来有点 fischy 的东西,但我认为它可能有用,但根本无法编译。为什么不允许编译器看到运算符返回一个 safe_bool_thing,而后者又可以转换为 bool() 并因此被测试?
struct safe_bool_thing
{
explicit safe_bool_thing( const bool bVal ) : b( bVal ) {}
operator bool () const { return b; }
private:
const bool b;
safe_bool_thing& operator = ( const safe_bool_thing& );
bool operator == ( const safe_bool_thing& );
bool operator != ( const safe_bool_thing& );
};
class MyTestableClass
{
operator safe_bool_thing () const { return safe_bool_thing( someCondition ); }
};
MyTestableClass a;
if( a ); //conditional expression of type 'MyTestableClass' is illegal
最佳答案
这应该有效:
class MyTestableClass
{
private:
void non_comparable_type() {}
public:
typedef void (MyTestableClass::* bool_type)();
operator bool_type () const { return (someCondition ? &MyTestableClass::non_comparable_type : 0); }
};
class MyOtherTestableClass
{
private:
void non_comparable_type() {}
public:
typedef void (MyOtherTestableClass::* bool_type)();
operator bool_type () const { return (someCondition ? &MyOtherTestableClass::non_comparable_type : 0); }
};
要阻止 if (a == b)
情况,这取决于两种类型都转换为不兼容的指针类型这一事实。
关于c++ - 是否可以在不必派生自 safe_bool 类的情况下实现 safe bool 习语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3940908/
我偶然发现了 Wikipedia 上的线程安全文章;它区分了几个安全级别,尤其是: Thread safe: Implementation is guaranteed to be free of ra
当我启动 Rails 时,如何摆脱这个警告/错误。 在没有 :safe 选项的情况下调用“加载”——默认为安全模式。 => Booting Thin => Rails 3.2.13 applicati
当我启动 Rails 时,如何摆脱这个警告/错误。 在没有 :safe 选项的情况下调用“加载”——默认为安全模式。 => Booting Thin => Rails 3.2.13 applicati
我正在尝试使用 FCM 和 https://www.simplifiedcoding.net/firebase-cloud-messaging-android/ 上提供的教程向我的应用程序添加通知服务
我正在 VB.net 中寻找“安全”点符号。这样的事情是否存在——在 VB.NET 或任何语言中?我希望能够做的是,在使用 non-nullable 遗留对象时,解决如下问题: “如果有计划,如果有案
我在我的机器上使用 Windows 10 家庭单语言版,这是一个 64 位操作系统。 我已经安装了最新版本的 XAMPP,它在我的机器上安装了 PHP 7.2.7。 我是根据摘自 PHP Manual
我在 XmlDocument class documentation 中看到在 MSDN 上 Any public static ( Shared in Visual Basic) members o
例如,我经常想用 SELECT whatever FROM questions WHERE views * N + votes * M > answers AND NOT(answered) O
在DataStax收购Aurelius之后,自从Titan 1.0.0在2015年9月发布以来,自那时以来几乎没有提交过,所以我想知道在生产中使用TitanDB是否安全。谁能给我一些见识? 最佳答案
给定一个文件: dept4.abc.edu dept3.abc.edu dept2.abc.edu dept1.abc.edu 我知道如何使用以下命令获取从底部开始的第三行: tail -3 file
SELECT TO_NUMBER('*') FROM DUAL 这显然给了我一个异常(exception): ORA-01722: invalid number 有没有办法“跳过”它并获取 0 或 N
我不是在问这些是否真的是随机的。我只是想知道如果两个用户同时点击一个页面他们可以获得相同的随机数吗?我在想,如果我在多核服务器上运行它,我会因为同步或其他原因在很长一段时间内生成相同的随机数吗? pu
我有一个服务器存储来自客户端的数据。每个客户端都在自己的线程中工作,并且拥有一个数据对象。 这个数据对象是一个自定义类,让我们调用包含非特定数据的 Data.java,这可能是一些字节,但通常约为 1
我正在开发一个应用程序,其中我有一个包含 5000 行和 4 列的数据库。 problem_id (int) problem_no (string) problem_title (string) da
我有一个表,其中每行的字段数据都不完整,我想要修复。 这就是我的意思: mysql> CREATE TABLE test ( key INT a CHAR(1),
这个问题已经有答案了: How do JavaScript closures work? (86 个回答) 已关闭 6 年前。 所以,这个代码片段工作起来非常方便,但我对它的工作方式感到有点惊讶。 v
我想 compile C++ extensions to SQL Server , 来自文档 Safe mode: Run verifiably typesafe code; compiled wit
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。为了帮助澄清这个问题以便它可以重新打开,visit the help center。 关
这种互斥模式是否像我认为的那样安全?如果是这样,你怎么调用它? lock (_lock) { if (_flag) return; else _flag = true; } try {
假设您使用 EntityFramework 作为 ORM,所有这些都封装在一个单独的 DAL 类库中。 您在另一个“公共(public)”类库中有以下 POCO 对象,它在您的 DAL、SL 和表示层
我是一名优秀的程序员,十分优秀!