Я получил класс enum под названием Animal
в качестве ключа для поиска. Он определен в AnimalList.h
enum class Animal{Dog, Cat}; // v1
И я получил DLL AnimalInformation.dll
с интерфейсом следующим образом:
HRESULT GetDescription(Animal animal_key, char* buffer, int& size_in_buffer);
Я знаю, что класс enum - это переименование сильного типа. Если в какой-то момент я хочу добавить доступных животных, безопасно ли продлить мой класс enum enum?
AnimalList.h // v2
enum class Animal{Dog, Cat, Tiger, Lion};
Соответствует ли Animal{Dog, Cat, Tiger, Lion}
Animal{Dog, Cat}
?
Typechecking происходит во время компиляции, а определение имен, которое обеспечивает различные функции с разными типами, имеет разные имена, основанные на базовом типе и имени класса, поэтому должно давать одно и то же имя для обоих ваших примеров.
Однако вы должны бороться с тем, что GetDescription(Animal animal_key, char* buffer, int& size_in_buffer)
не знает о Tiger
и Lion
и возвращает ERR_ANIMAL_UNKNOWN
к пользовательскому коду, который пытается его использовать, если вы не согласны с ним DLL файлы. Что было бы не очень приятно. Это, конечно, проблема с ANY перечислением, и любая DLL, которая принимает данные пользователя, и определенные значения распознаются, а другие - нет.
ERR_ANIMAL_UNKNOWN
если он использует неправильную версию DLL?enum class Animal { Dog=0, Cat=1, Tiger=2 }
, тогда в будущем мы можем удалитьCat
и при этом иметь те же значения).