Ich bin ein Makro mit einer primitiven Struktur zu erweitern: kannMöglich, Attribute * nach * einer Strukturdeklaration abzuleiten?
pub struct MyTypedNumber(pub u32);
struct_impl_my_features!(MyTypedNumber);
Die struct_impl_my_features
Makrofunktionen für MyTypedNumber
& Merkmale implementieren, gibt es jedoch einen Fall, in dem die Nutzungs #[derive(PartialEq, Eq)]
verwenden - zum Beispiel.
Ist es möglich, #[derive(...)]
zu verwenden, nachdem die Struktur bereits deklariert wurde?
Eine Alternative ist in der Struktur Definition als item
Argument für ein Makro weitergeben müssen:
struct_impl_my_features!(
pub struct MyTypedNumber(pub u32);,
MyTypedNumber
);
Dies funktioniert, so dass es die beste Option sein kann, obwohl es ziemlich klobig und bedeutet die Erklärung und Makro Erweiterung muss zusammen sein.
Siehe this complete example, das Makro heißt struct_bitflag_impl
(zweites Beispiel).
ich um dieses arbeitete von PartialEq
und Eq
manuell Umsetzung aber ich in einem Fall lief, wo Rust muss#[derive(...)]
innerhalb match
Anweisung als Konstanten verwendet werden:
= warning: this was previously accepted by the compiler but is being phased out;
it will become a hard error in a future release!
= note: for more information,
see RFC 1445 <https://github.com/rust-lang/rfcs/pull/1445>
Können Sie bitte ein vollständiges Beispiel hinzufügen? Was hat MyTypedNumber mit MyTypedInt zu tun? –
'MyTypedInt' versehentlich eingelassen, korrigiert - Link zum vollständigen Beispiel hinzugefügt. – ideasman42
Derive macht nichts Magisches. Sie sollten in der Lage sein, genau die gleiche Implementierung manuell zu tun, wie es der Fall ist. Könnten Sie das Beispiel angeben, in dem Sie das Gefühl haben, dass Sie ableiten müssen? – paholg