Ich fand ähnliche Frage Compile-time generic type size check, aber es erhielt keine Antwort.Überprüfen Sie Zeigergröße zur Kompilierzeit
Das Problem ist, in Zusammenarbeit mit anderen Programmiersprache über FFI + unsicher, ich sicher sein will, dass mem::size_of::<*mut T>()
geeignete Größe haben. Ich fand solche static_assert
Makro in Internet:
macro_rules! static_assert {
(type $t:ty;) => (
type __StaticAssert = $t;
);
(type $t:ty; $e:expr $(, $ee:expr)*) => (
static_assert!(type ($t, [i8; 0 - ((false == ($e)) as usize)]); $($ee),*);
);
($e:expr $(, $ee:expr)*) => (
static_assert!(type [i8; 0 - ((false == ($e)) as usize)]; $($ee),*);
);
}
static_assert!(2 == 2);
es funktioniert, aber wenn ich mem::size_of::<*const f64>()
innen Makro verwenden, um alle fehlschlägt, wegen: calls in constants are limited to struct and enum constructors
, eine Ahnung, wie size_of
*const f64
bei der Kompilierung zu berechnen?
Das Öffnen eines Duplikats ist nicht der richtige Weg, wenn eine andere Frage keine Antwort erhalten hat. Wenn Sie die Sichtbarkeit der anderen Frage erhöhen möchten, sollten Sie eine [Kopfgeld] hinzufügen (http://stackoverflow.com/help/). Bounty) –
Es sieht nicht ein komplettes Duplikat für mich, könnten Sie erweitern, wie diese Frage anders ist als [diese verwandte Frage] (http://stackoverflow.com/questions/30330519/compile-time-generic-type- Größenprüfung) Sie verlinkt? –
'mem :: size_of' ist zur Kompilierzeit noch nicht auswertbar. Warten Sie ein Jahr und die Geschichte könnte sich ändern (aber vielleicht nicht, wer weiß?). – Veedrac