연습용으로 비트 벡터 라이브러리를 구현하려고하지만 제네릭 형식 매개 변수의 기본값을 정의 할 때 문제가 발생합니다. 기본 제네릭 형식 매개 변수를 유추 할 수 없습니다.
이
코드의 발췌 한 것입니다 내가 가진 :extern crate num;
use std::cmp::Eq;
use std::ops::{BitAnd,BitOrAssign,Index,Shl};
use num::{One,Zero,Unsigned,NumCast};
pub trait BitStorage: Sized +
BitAnd<Self, Output = Self> +
BitOrAssign<Self> +
Shl<Self, Output = Self> +
Eq + Zero + One + Unsigned + NumCast + Copy {}
impl<S> BitStorage for S where S: Sized +
BitAnd<S, Output = S> +
BitOrAssign<S> +
Shl<S, Output = S> +
Eq + Zero + One + Unsigned + NumCast + Copy {}
pub struct BitVector<S: BitStorage = usize> {
data: Vec<S>,
capacity: usize
}
impl<S: BitStorage> BitVector<S> {
pub fn with_capacity(capacity: usize) -> BitVector<S> {
let len = (capacity/(std::mem::size_of::<S>() * 8)) + 1;
BitVector { data: vec![S::zero(); len], capacity: capacity }
}
//...
}
다음과 같이 나는 그것을 사용하려면 :
: 나는 컴파일러 오류 그러나lib.rs:225:24: 225:48 error: unable to infer enough type information about
_
; type annotations or generic parameter binding required [E0282]
lib.rs:225 let vec_1000 = BitVector::with_capacity(1000);
^~~~~~~~~~~~~~~~~~~~~~~~
lib.rs:225:24: 225:48 help: runrustc --explain E0282
to see a detailed explanation
let vec = BitVector::with_capacity(1024);
코드에 좀 더 많은 컨텍스트를 제공하기 위해 현재 유효한 유형은 BitStorage
입니다 (이에 국한되지 않음 *) u8
, u16
, u32
, u64
및 usize
.
(*) 해당 유형의 모든 특성을 구현하는 경우 사용자 정의 u128
구현 (예제처럼)을 작성할 수 있다고 생각합니다.
be stable yet으로 보이지 않는 RFC 213이라는 문제를 찾은 후. 그러나 다른 한편으로는 HashMap 현재 안정적으로 기본값을 사용하고 있으므로 제대로 작동해야합니다.