C++ 我可以在DLL边界使用'enum class'作为函数的参数类型吗?

C++ 我可以在DLL边界使用'enum class'作为函数的参数类型吗?,c++,enums,C++,Enums,我得到一个名为Animal的枚举类作为查找键。它在AnimalList.h enum class Animal{Dog, Cat}; // v1 我得到了一个DLLanimalinfo.DLL,接口如下: HRESULT GetDescription(Animal animal_key, char* buffer, int& size_in_buffer); 我知道enum类是enum的强类型版本。如果有一天我想添加可用的动物,扩展我的动物枚举类安全吗 AnimalList.h //

我得到一个名为
Animal
的枚举类作为查找键。它在
AnimalList.h

enum class Animal{Dog, Cat}; // v1
我得到了一个DLL
animalinfo.DLL
,接口如下:

HRESULT GetDescription(Animal animal_key, char* buffer, int& size_in_buffer);
我知道enum类是enum的强类型版本。如果有一天我想添加可用的动物,扩展我的动物枚举类安全吗

AnimalList.h // v2

enum class Animal{Dog, Cat, Tiger, Lion};

Animal{Dog,Cat,Tiger,Lion}
是否与
Animal{Dog,Cat}
匹配?

类型检查在编译过程中发生,并且确保具有不同类型的不同函数具有不同名称的名称更改基于类的基类型和名称,因此应该为两个示例提供相同的名称


但是,您必须面对的是
GetDescription(Animal-Animal\u key,char*buffer,int&size\u in\u buffer)
将不知道
Tiger
Lion
,如果您的DLL不匹配,则将
ERR\u Animal\u UNKNOWN
返回给试图使用它的用户代码。那可不太好。这当然是任何枚举和任何接收用户数据的DLL的问题,某些值可以识别,而其他值则不能识别

谢谢。因此,将枚举类放在DLL边界是可以的,但问题是,如果客户端使用错误版本的DLL,客户端可能会收到
errr\u ANIMAL\u UNKNOWN
消息?是的,据我所知。如果客户端(DLL的用户)知道“更多”的值(当然,如果删除值,就会发生奇怪的事情,除非您还使用
enum class Animal{Dog=0,Cat=1,Tiger=2}
修复数值,那么将来我们可以删除
Cat
,并且仍然具有相同的值)。