ben bir egzersiz olarak Bit Vektör kitaplığını uygulamak çalışıyorum anlaşılmaktadır edilemez. Standart genel tür parametresi genel tür parametresi için varsayılan bir değer tanımlamak isteyen zaman ancak sorun düşüyorum,
Bu
kodunun bir alıntıdır ben: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 }
}
//...
}
Ve şöyle onu kullanmak istiyorum:
: Bir derleyici hatası alıyorum Ancaklib.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);
Kod için biraz daha fazla bağlam vermek için, şu anda geçerli olan BitStorage
için geçerli olan türler (bunlarla sınırlı değildir) * u8
, u16
, u32
, u64
ve usize
.
(*) Bunu türü için tüm özellikleri uygulamak eğer bir özel u128
uygulanmasını (sadece örnek olarak) yazabilirsiniz düşünüyorum.
Sorun hakkında daha sonra, be stable yet görünmeyen RFC 213 numarasını buldum. Ancak diğer yandan HashMap, şu anda kararlı olan varsayılan değerleri kullanıyor, bu yüzden çalışıyor olmalı, değil mi?