Не выходит (полный код):
impl<T> B for A<T> {
fn f(&self) {
const SIZE: usize = Self::SIZE; // SIZE ранее прописан в impl для A<T>
//const SIZE: usize = std::mem::size_of::<T>();
}
}
Оба варианта не компилятся с
use of generic parameter from outer function
use a type here instead
Что не так и как починить? Любопытно, что замена const на let всё чинит.
rustc --explain E0401
Спасибо. Я это читал, но всё же ответа на вопрос "как чинить" не нашёл. Вспомогательную функцию в impl трейта я сделать не могу. Сделать f generic'ом не могу - требование трейта. Да и в целом в этой справке про const почти не сказано, в основном про типы.
Хотя бы так: struct A<T>(T); impl<T> A<T> { fn get_sizeof_t() -> usize { std::mem::size_of::<T>() } } trait B { fn f(&self); } impl<T> B for A<T> { fn f(&self) { let size = A::<T>::get_sizeof_t(); dbg!(size); //const SIZE: usize = std::mem::size_of::<T>(); } }
Перестаёт работать, если заменить let на const :)
Зачем тебе конст?
Сделать [u8; size_of::<T>()]
Зачем тебе varlena?
Он же не varlen, а вполне себе fixed
Обсуждают сегодня