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

时间:2014-09-19 08:10:40

标签: c++ enums

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

中定义
enum class Animal{Dog, Cat}; // v1

我得到了一个带有以下接口的DLL AnimalInformation.dll

HRESULT GetDescription(Animal animal_key, char* buffer, int& size_in_buffer);

我知道枚举类是枚举的强类型。如果有一天我想添加可用的动物,扩展我的动物枚举类是否安全?

AnimalList.h // v2

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

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

1 个答案:

答案 0 :(得分:0)

在编译期间发生了Typechecking,并且确保具有不同类型的不同函数的名称修改具有不同的名称,这些名称基于类的基类型和名称,因此应为这两个示例指定相同的名称。

但是,您必须应对的是GetDescription(Animal animal_key, char* buffer, int& size_in_buffer)无法了解TigerLion,并将ERR_ANIMAL_UNKNOWN返回给用户代码正在尝试使用它,如果你有不匹配的DLL。哪个不太好。这当然是任何枚举的问题,任何获取用户数据和某些值的DLL都会被识别而其他值则不会被识别。