在 C++ 中,我们可以重载operator bool()将结构转换为bool:
struct Example {
explicit operator bool() const {
return false;
}
};
int main() {
Example a;
if (a) { /* some work */ }
}
Run Code Online (Sandbox Code Playgroud)
我们可以用 Rust 做一些简单(而且优雅)的事情吗:
pub struct Example {}
fn main() {
let k = Example {};
if k {
// some work
}
}
Run Code Online (Sandbox Code Playgroud)
She*_*ter 11
没有直接等价的operator bool()。一个接近的替代方案是实现From(也将实现Into)并显式调用转换:
pub struct Example;
impl From<Example> for bool {
fn from(_other: Example) -> bool {
false
}
}
fn main() {
let k = Example;
if k.into() {
// some work
}
}
Run Code Online (Sandbox Code Playgroud)
这将取得 的所有权,这意味着您在转换后Example无法使用它。k您可以实现它作为参考 ( impl From<&Example> for bool),但调用站点会变得更丑陋 ( (&k).into())。
在这种情况下我可能会避免使用From/ Into。相反,我会在该类型上创建一个谓词方法。这将更具可读性并且可以采用&self,允许您继续使用该值。
也可以看看:
| 归档时间: |
|
| 查看次数: |
1287 次 |
| 最近记录: |