我想自己写一个bitmap(因为现在bool占用一个字节而不是一个二进制Bit) 我试了试这个:
#![feature(min_const_generics)]
#![feature(const_generics)]
#![feature(const_evaluatable_checked)]
const fn bit_length(N:usize)->usize{1+((N as isize -1)/64isize) as usize}
#[derive(Debug,Clone,Copy)]
struct Bit<const N:usize>([i64;bit_length(N)]);
impl<const N: usize> Bit<N>{
fn new()->Self{
Bit([0;N])
}
}
fn main(){
println!("{:?}",Bit::<12>::new())
}
然后被告知,
error: unconstrained generic constant
--> test.rs:6:27
|
6 | struct Bit<const N:usize>([i64;bit_length(N)]);
| ^^^^^^^^^^^^^^^^^^^
|
help: consider adding a `where` bound for this expression
--> test.rs:6:32
|
6 | struct Bit<const N:usize>([i64;bit_length(N)]);
| ^^^^^^^^^^^^^
error: aborting due to previous error; 2 warnings emitted
如果把这里的bit_length(N)改成N,可以通过编译,(但这样Bit代表的是少于64N个bool,而非固定的N个bool)
想问一下大家有没有什么办法处理这种问题(又或者说这个常数泛型还没实现好?)
1
共 5 条评论, 1 页
评论区
写评论原来是这样
我以为where是给bit_length加的,没想到要给整个数组加
学到了!
谢谢:)
--
👇
uno: 提示不是很明显了么,叫你加
where
约束。而且你new方法里不太对。https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=8af01b27dd2decf9f88a2cde43294be5
提示不是很明显了么,叫你加
where
约束。而且你new方法里不太对。https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=8af01b27dd2decf9f88a2cde43294be5
数组的N可以为常量哈。
感谢回复
我希望搞一些定长的bitmap(用于应付leetcode里面可以打表的题目)
现在的问题是长度只能手动计算,不能自动计算
我之前看到过,定义数组长度的时候,数组长度
[T;N]
里面的N
可以是常量表达式而非常量我不知道在常量泛型里面该如何把
N
定义成常量表达式--
👇
ezlearning: 处理二进制bit需要用到shift,mask之类的, 可以参考别人怎么处理的哈:
https://github.com/image-rs/image/blob/master/src/codecs/bmp/decoder.rs
处理二进制bit需要用到shift,mask之类的, 可以参考别人怎么处理的哈:
https://github.com/image-rs/image/blob/master/src/codecs/bmp/decoder.rs