我可以在DLL边界使用“enum class”作为函数的参数类型吗

Can I use `enum class` as argument type of function at DLL boundary?

本文关键字:函数 参数 类型 class 边界 DLL enum 我可以      更新时间:2023-10-16

我得到了一个名为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的强类型版本。如果有一天我想添加可用的动物,那么扩展我的动物枚举类安全吗?

AnimalList.h // v2
enum class Animal{Dog, Cat, Tiger, Lion};

Animal{Dog, Cat, Tiger, Lion}Animal{Dog, Cat}匹配吗?

类型检查发生在编译期间,确保具有不同类型的不同函数具有不同名称的名称篡改是基于类的基类型和名称的,因此应该为两个示例提供相同的名称。

然而,您必须面对的是,如果您有不匹配的DLL,GetDescription(Animal animal_key, char* buffer, int& size_in_buffer)将不知道TigerLion,并将ERR_ANIMAL_UNKNOWN返回给尝试使用它的用户代码。那就不太好了。这当然是ANY枚举和任何获取用户数据的DLL的问题,某些值被识别,而其他值则不被识别。