8 个稳定版本
1.3.0 | 2024 年 5 月 12 日 |
---|---|
1.2.0 | 2022 年 8 月 15 日 |
1.1.0 | 2022 年 6 月 2 日 |
1.0.6 | 2022 年 4 月 7 日 |
1.0.1 | 2019 年 8 月 30 日 |
#2 in #clucompany
546 每月下载量
用于 cluconstdata
30KB
492 行
!!! 注意 !!!
- 在不检查数据大小的情况下进行类型转换时,您真的需要了解您正在做什么。
- 您必须了解您使用的平台的具体情况。
库功能
- 无数据和数据维度检查地将任何类型 A 转换为任何类型 B 的泛型数据。
- 能够在非常旧的 Rust 版本中的常量函数中使用转换。
- 通过合约实现延迟转换的可能性。
- 能够在没有标准库的情况下工作。
用法
将此添加到您的 Cargo.toml
[dependencies]
cluFullTransmute = "1.3.0"
并将此添加到您的源代码中
use cluFullTransmute::mem::transmute;
示例
use cluFullTransmute::transmute_or_panic;
use core::fmt::Display;
/*
For example, let's write some code with a Drop trait that panics when dropped and
holds some data. We then transmute this data to another similar struct and check
that we have effectively overridden the Drop trait and have a different struct
with some data.
We can also remove the Drop trait altogether or do any number of other things.
*/
/// Struct to panic when dropped
#[derive(Debug)]
#[repr(transparent)]
struct PanicWhenDrop<T>(T);
impl<T> Drop for PanicWhenDrop<T> {
fn drop(&mut self) {
panic!("panic, discovered `drop(PanicWhenDrop);`");
}
}
/// Struct to print value when dropped
#[derive(Debug)]
#[repr(transparent)]
struct PrintlnWhenDrop<T: Display>(T)
where
T: Display;
impl<T> Drop for PrintlnWhenDrop<T>
where
T: Display,
{
fn drop(&mut self) {
println!("println: {}", self.0);
}
}
fn main() {
let a: PanicWhenDrop<u16> = PanicWhenDrop(1024);
println!("in a: {:?}", a);
let b: PrintlnWhenDrop<u16> = unsafe { transmute_or_panic(a as PanicWhenDrop<u16>) };
println!("out b: {:?}", b);
drop(b); // <--- drop, PrintlnWhenDrop!
}
查看所有
许可证
此项目有一个单独的许可证 (LICENSE-APACHE-2.0)。