Ich habe einen Wrapper newtype um ein Array. Ich nahm an, dass ich size_of
verwenden konnte, anstatt die Größe des Arrays manuell zu übergeben, aber der Compiler denkt, dass ich falsch liege.Array mit einem konstanten Ausdruck für seine Größe deklarieren
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));
}
Ich bin mit dem nächtlichen: rustc 0.13.0-nächtlichen (7e43f419c 2014-11-15 13:22:24 +0000)
Dieser Code schlägt mit der folgende Fehler:
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
die Rust Reference on Array Expressions lässt mich denken, dass dies funktionieren sollte:
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.
Gibt es ein RFC- oder GitHub-Problem für ein sizeof-Konstrukt, das zur Kompilierzeit funktioniert? – rraval
@rraval: Es gibt einen Wunsch nach Compil-Time Function Evaluation im Allgemeinen, aber das ist nicht etwas für 1.0, das ist der Fokus für jetzt. Während "size_of" könnte speziell sein, könnte es einfach nicht wert sein. –
Hier gibt es eine begrenzte RFC, aber es ist ziemlich nackt: https://github.com/rust-lang/rfcs/issues/322 – Quartz