BoxAny downcast return Keine im dylib-Modul

9

Ich benutze Dylib als Plugin-Lösung. Wenn ich die Funktion register aufruft (im folgenden Code ist fun mein Projektname):

%Vor%

In der Funktion register von dylib mem.get_mut::<fun::router::Router>("router") return None

Aber wenn ich mem.get_mut::<fun::router::Router>("router") in main.rs verwende. Es gibt Router zurück, wie ich will.

Ich teste mehr und erhalte ein Ergebnis:

In dylib:

  • mem.get_mut::<String>("test") funktioniert gut.
  • mem.get_mut::<fun::Bob>("bob") return None .

In main.rs :

  • mem.get_mut::<String>("test") funktioniert gut.
  • mem.get_mut::<fun::Bob>("bob") funktioniert gut.

Meine Frage:

Warum downcast_mut gibt keine in dylib zurück, wenn der generische Typ von downcast im Hauptmodul definiert ist?

mem struct:

%Vor%

get_mut:

%Vor%

Entschuldigung für meine schlechte Beschreibung.

Aktualisierung:

TypeId Testergebnis:

%Vor%

TypeId ist anders. Irgendeine Lösung für dieses Problem?

    
Feng Cen 31.07.2016, 11:21
quelle

1 Antwort

4

Wie bereits erwähnt, ist der TypeId bis jetzt (1.10) nicht stabil über Kisten oder Kompilationen.

@eddyb hat gerade diese Woche eine Pull-Anfrage gelandet, die TypeId einzigartig macht aktiviert Ihren speziellen Anwendungsfall.

Es ist wichtig zu beachten, dass diese Stabilität nicht vollständig ist; Wenn Sie zum Beispiel die Kommentare lesen, werden Sie feststellen, dass sich die TypeId ändern kann, wenn sich die Compiler-Version oder die Crate-Version ändert. Für einen einzelnen Compiler und eine gemeinsam genutzte Abhängigkeit ist es jedoch bei Neukompilierungen stabil.

Für jetzt können Sie entweder einen nächtlichen Compiler verwenden oder bis zur nächsten stabilen Version warten, die diesen Patch enthält (1.12 oder 1.13, nehme ich an).

    
Matthieu M. 11.08.2016, 03:13
quelle

Tags und Links