原文
类似于自定义类,在.h文件中,任意编写一个自定义枚举类型,然后通过宏DECLARE_BEHAVIAC_ENUM声明该枚举类型。需要注意的是,宏DECLARE_BEHAVIAC_ENUM必须定义在全局的namespace里,即放在任何命名空间之外。
如下代码样例所示:
namespaceTNS{namespaceNE{namespaceNAT{enumeColor{RED,GREEN,BLUE,YELLOW,WHITE,};}}}DECLARE_BEHAVIAC_ENUM(TNS::NE::NAT::eColor,eColor);- 在.cpp文件中,通过一系列宏注册该枚举自身的描述及其枚举值:
宏BEGIN_ENUM_DESCRIPTION和END_ENUM_DESCRIPTION表示枚举信息注册的开始和结束。
可选的宏ENUMCLASS_DISPLAY_INFO用于注册枚举自身的显示名和描述。
宏DEFINE_ENUM_VALUE用于注册枚举的值,可以通过.DISPLAYNAME的追加方式为值添加显示名,通过.DESC的追加方式为值添加描述。
如下代码样例所示:
BEGIN_ENUM_DESCRIPTION(TNS::NE::NAT::eColor,eColor){ENUMCLASS_DISPLAY_INFO(L"色彩枚举",L"eColor是用于测试枚举使用的类型");DEFINE_ENUM_VALUE(TNS::NE::NAT::RED,"RED").DISPLAY_INFO(L"红色",L"激进");DEFINE_ENUM_VALUE(TNS::NE::NAT::GREEN,"GREEN");DEFINE_ENUM_VALUE(TNS::NE::NAT::BLUE,"BLUE");DEFINE_ENUM_VALUE(TNS::NE::NAT::YELLOW,"YELLOW");DEFINE_ENUM_VALUE(TNS::NE::NAT::WHITE,"WHITE");}END_ENUM_DESCRIPTION()- 在初始化注册(Register)的部分需要加上如下的代码,反注册(UnRegister)的部分添加相应UnRegister的代码。注意这部分Register/UnRegister的代码不是必须的,如果该类型没有用作par或者没有用作条件比较,就可以不需要。
behaviac::TypeRegister::Register<TNS::EnumTest>(" TNS::EnumTest ");behaviac::TypeRegister::UnRegister<TNS::EnumTest>(" TNS::EnumTest ");更多细节可以参考behaviac组件C++源码库中btunittest工程的UnitTestTypes.h文件中eColor结构体相关的代码。
声明的类型只用被使用过才会导出。所谓使用过是指:
作为某Agent的成员
作为某Agent成员函数的参数或返回值
如果只是声明了,但是没有被使用过,则不会被导出。