• 类似于自定义类,在.h文件中,任意编写一个自定义枚举类型,然后通过宏DECLARE_BEHAVIAC_ENUM声明该枚举类型。需要注意的是,宏DECLARE_BEHAVIAC_ENUM必须定义在全局的namespace里,即放在任何命名空间之外。
    如下代码样例所示:
namespace TNS
{
    namespace NE
    {
        namespace NAT
	{
            enum eColor
	    {
	        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结构体相关的代码。


声明的类型只用被使用过才会导出。所谓使用过是指:
1. 作为某Agent的成员
2. 作为某Agent成员函数的参数或返回值
如果只是声明了,但是没有被使用过,则不会被导出。

发表评论

电子邮件地址不会被公开。 必填项已用*标注