Was ist die richtige Art zu Casting (in C++/CLI) von einem nativen Code enum
zu einem verwalteten Code enum
, die die gleichen enum
Werte enthalten? Gibt es einen Unterschied zur Verwendung der C# -Wegweise wie zum Beispiel (int)
in C++/CLI.C++/CLI: Casting von unmanaged enum zu verwaltet enum
Antwort
Angenommen, Ihre nativen Code ist
enum shape_type_e
{
stUNHANDLED = 0, //!< Unhandled shape data.
stPOINT = 1 //!< Point data.
...
};
und verwaltetem Code ist
public enum class ShapeType
{
Unhandled = 0,
Point = 1,
...
};
Sie vom verwalteten zum nativen werfen können mit
shape_type_e nativeST = stPOINT;
ShapeType managedST = static_cast<ShapeType>(nativeST);
Debug.Assert(managedST == ShapeType::Point);
ich immer static_cast
verwenden, nicht die C# Art des Castings.
Kommt drauf an. Wenn Sie zum Beispiel eine CLI-Enumeration haben, die einen zugrunde liegenden Typ von ushort hat, kann sie keinen Wert von 257 enthalten. Standardmäßig basiert die CLI enum auf int, was in den meisten Fällen in Ordnung sein sollte. Wenn Ihr systemeigener C++ - Code bei Enums unsignierte 32-Bit-Ints/64-Bit-Ints als zugrunde liegenden Typ verwendet, wechseln Sie die Basis Ihrer CLI-Enumeration zu UInt32, long oder ulong.
Ich werde dieses Problem nicht haben, da beide enum vom Typ int sind. Aber welche Art von Cast sollte in diesem Fall verwendet werden? Sollte es const_cast, static_cast, dynamic_cast, reinterpret_cast, safe_cast oder nur die C# -Casting sein (ein Beispiel ist (int))? – Lopper
- 1. Casting zu Enum
- 2. Casting zu Nullable Enum
- 3. Casting SqlDataType zu C# Enum
- 4. Casting ENUM vs. Enum.ToObject
- 5. Der Unterschied zwischen Enum und Enum-Klasse?
- 6. Enum von Enum ist NULL
- 7. Casting Objekte in Enum abstrakte Methoden
- 8. Get Enum von ENUM Attribut
- 9. Resharper Warnung Casting Enum zu UIntPtr, aber keine Compiler-Warnung
- 10. Casting-String zu type-safe-enum mit benutzerdefinierter Konvertierung
- 11. C# enum - Warum funktioniert * implizites * Casting von 0?
- 12. Wechsel von Bitarray zu Enum
- 13. Java benutzerdefinierte Enum-Wert ENUM
- 14. Javascript Enum innerhalb einer Enum
- 15. Warum ist "enum of enum of enum.." erlaubt?
- 16. abrufen Wert von Enum gegebenen Beschreibung von Enum
- 17. Callback unmanaged code aus verwaltet C#
- 18. Karte enum zu einer Funktion/Aktion mit Enum-spezifischen Methode
- 19. Enum von String
- 20. Pass Enum mit Enum-Klasse per Referenz
- 21. Enum und Dictionary <Enum, Action>
- 22. Active Gruppe von ENUM
- 23. Java enum zu mysql enum in vorbereitete Anweisung
- 24. Zählfrequenzen von ENUM-Werte
- 25. Java: enum toString()
- 26. Enum Wert von Anzeigename
- 27. Vorteil von Enum mit
- 28. Enum in Hibernate, persistierende als Enum
- 29. Bedingter Enum-Schalter mit gespeicherter Enum
- 30. Get enum und senden enum Wert
Aus dem obigen Code, nehme ich an, dass Sie von nativen zu verwalteten enum casten. Was ist umgekehrt von "gemanagt" zu "nativ"? – Lopper
Statische Besetzung ist Ihr Freund in beide Richtungen ... nativeST = statischer_cast (managedST); –
mcdave
Danke mcdave! :) – Lopper