1 个不稳定版本
0.1.0 | 2024年6月15日 |
---|
1892 在 开发工具
每月431 次下载
用于 aformat
10KB
145 行
typenum_mappings
一个proc-macro,用于将typenum的UInt
类型映射到您的自定义类型。
通过cargo doc --open --no-deps
或docs.rs阅读文档。
最低支持的Rust版本
目前为1.63
,提高版本被认为是破坏性的。
lib.rs
:
一个proc-macro,用于将typenum的UInt
类型映射到您的自定义类型。
当在稳定版上模拟const_generic_exprs
时,这很有用,作为将const泛型转换为typenum类型的过程的第三步
- 将const泛型转换为typenum类型
- 通过typenum类型执行表达式
- 将这些typenum类型转换回结果类型
示例 - concat_array
use std::ops::Add;
use typenum::{U, ToUInt, Const};
trait ArrayLike {
fn new() -> Self;
}
impl<T: Default, const N: usize> ArrayLike for [T; N] {
fn new() -> Self {
std::array::from_fn(|_| T::default())
}
}
trait TypenumToArray<T> {
type Array: ArrayLike;
}
typenum_mappings::impl_typenum_mapping!(
impl<const N: usize = 0..=1000, T: Default> TypenumToArray<T> for #TypeNumName {
type Array: = [T; N];
}
);
type RunAdd<T1, T2> = <T1 as Add<T2>>::Output;
type RunTypeToArray<T, N> = <N as TypenumToArray<T>>::Array;
fn concat_array<const N1: usize, const N2: usize, T>(a1: [T; N1], a2: [T; N2]) -> RunTypeToArray<T, RunAdd<U<N1>, U<N2>>>
where
Const<N1>: ToUInt,
Const<N2>: ToUInt,
U<N1>: Add<U<N2>>,
<U<N1> as Add<U<N2>>>::Output: TypenumToArray<T>
{
todo!()
}
let out = concat_array([1, 2, 3], [4, 5, 6]);
assert_eq!(out.len(), 6);
最低支持的Rust版本
目前为1.63
,提高版本被认为是破坏性的。
依赖项
~0.4–0.9MB
~20K SLoC