8
Ten kodCzy jest możliwe utworzenie `HashMap` z kluczem typu` * const Any`?
use std::any::Any;
use std::collections::HashMap;
fn main() {
let x: HashMap<*const Any, i32> = HashMap::new();
}
Daje mi następujący błąd:
error: the trait `core::marker::Sized` is not implemented for the type `core::any::Any` [E0277]
let x: HashMap<*const Any, i32> = HashMap::new();
^~~~~~~~~~~~
Przede wszystkim nie rozumiem dlaczego narzekają core::any::Any
, gdy klawisze są typu *const core::any::Any
. Czy nie powinno być rozmiaru niezależnie od tego, na co wskazuje? Aby to sprawdzić, próbowałem:
use std::any::Any;
use std::mem::size_of;
fn main() {
println!("size_of(*const Any) = {}", size_of::<*const Any>());
}
który, jak się spodziewano, produkuje:
size_of(*const Any) = 16
FWIW , błąd występuje dla dowolnego wskaźnika do cechy. – Shepmaster
Myślę, że błąd wynika z faktu, że istnieje 'impl Hash dla * const T', ale' T' jest domyślnie wymagane, aby 'Sized', nawet jeśli nie jest to konieczne. –