Mam otokę typu new dookoła tablicy. Zakładałem, że mogę użyć size_of
zamiast ręcznie przesuwać rozmiar tablicy, ale kompilator uważa, że się mylę.Deklarowanie tablicy przy użyciu stałego wyrażenia dla jej rozmiaru
use std::mem::{size_of, size_of_val};
#[repr(C, packed)]
struct BluetoothAddress([u8, ..6]);
fn main() {
const SIZE: uint = size_of::<BluetoothAddress>();
let bytes = [0u8, ..SIZE];
println!("{} bytes", size_of_val(&bytes));
}
Używam nightly: rustc 0.13.0-nightly (7e43f419c 2014-11-15 13:22:24 +0000)
Kod ten nie powiedzie się z następujący błąd:
broken.rs:9:25: 9:29 error: expected constant integer for repeat count, found variable
broken.rs:9 let bytes = [0u8, ..SIZE];
^~~~
error: aborting due to previous error
Rust Reference on Array Expressions sprawia, że myślę, że to powinno działać:
In the
[expr ',' ".." expr]
form, the expression after the".."
must be a constant expression that can be evaluated at compile time, such as a literal or a static item.
Czy istnieje problem RFC lub GitHub dla konstruktu sizeof, który działa w czasie kompilacji? – rraval
@rraval: istnieje ogólna potrzeba oceny funkcji Compile-Time, jednak nie jest to coś na 1.0, na czym obecnie się skupiamy. Chociaż 'size_of' może być wyjątkowe, może nie być tego warte. –
Jest tutaj ograniczona liczba RFC, ale jest całkiem pusta: https://github.com/rust-lang/rfcs/issues/322 – Quartz