Разница между перечислением и классом перечисления?


Я недавно начал работать с управляемым кодом C++ / CLI, но я всегда определял перечисления так:

enum FV_MODE
{
    IDLE,DRAG,ADD_HITBOX,ADD_HURTBOX
};

До сегодняшнего дня, когда я получил сообщение об ошибке:

cannot define an unmanaged enum 'FViewer::FV_MODE' inside managed 'FViewer'
1>          use 'enum class'

Как было предложено в сообщении и на различных вопросах переполнения стека, изменив мой код на:

enum class FV_MODE
{
    IDLE,DRAG,ADD_HITBOX,ADD_HURTBOX
};

Быстро исправил проблему.

Тем не менее, я все еще не осознаю различий между двумя различными способами, которые я теперь знаю, чтобы определить перечисления. Может ли кто-нибудь помочь мне прояснить ситуацию? А также что делает "enum class" больше подходит для управляемого кода?

Заранее спасибо,

Гай

1 6

1 ответ:

Разница между неуправляемыми перечислениями и управляемыми перечислениями, которая делает управляемые перечисления более подходящими для управляемого кода, заключается в том, что управляемые перечисления являются управляемым кодом, а неуправляемые перечисления-неуправляемым кодом. Управляемые перечисления могут передаваться с помощью метаданных управляемого кода. Неуправляемые перечисления не могут, то есть они не могут проявляться как часть управляемого класса.