1. simple-ref-count
递归模板,使得通过定义T:SimpleRefCount<T>
使得T类都具有计数功能
template <typename T, typename PARENT = empty, typename DELETER = DefaultDeleter<T> >
class SimpleRefCount : public PARENT{}
2.Ptr
Ptr类默认数据成员T类型的指针自带引用计数功能(一般是simple-ref-count的子类)
3.TypeTraits类
用于将某一种类型定性(通过typedef将某种类型重定义为是否为常数类型,是否为指针类型,是否为引用类型等。)
4.Attribute相关
抽象类:都是SimpleRefCount的派生类
AttributeValue
- Copy
- SerializeToString 将AttributeValue转换成string形式
- DeserializeFromString 将string形式的AttributeValue转换成其他形式
AttributeAccessor
隐藏attribute的设置和查询- Set
(ObjectBase *, const AttributeValue &)
- Get
- HasGetter
- HasSetter
- Set
AttributeChecker
- CreateValidValue
- Check:类型bool
- GetValueTypeName
- Create:创建对应的
Ptr<AttributeValue>
- Copy:简单实现两个AttributeValue之间的赋值
Attribute相关宏
ATTRIBUTE_HELPER_HEADER(type)
对应checker,value,accessor三种类定义宏
ATTRIBUTE_HELPER_CPP(type)
对应checker,value三种类的实现的宏
《type##Value》
实现序列化和反序列化的时候需要用到<<和>>,因此内置类型必须定义这两种操作。
- 新增的函数
c++
//和Accessor的set函数配合使用,T对应于Accessor中目标服务类的类型
bool GetAccessor (T &value) const {
value = T (m_value);
return true;
}
《type##Checker》
- 《type##Value>》完全继承AttributeChecker,不做任何修改(也是空实现)
MakeSimpleAttributeChecker
函数模板,传入模板实参为:对应AttributeValue的内置成员类型,《type##Checker》类型。来实现具体的函数
Accessor
只是定义了Make##type##Accessor函数模板(输入形参为1个或者两个)。用户要生成对应的Accessor还需调用该函数。生成的AttributeAccessor可用于日后设置相应的AttributeValue
5.Callback
6.Trace
TracedCallback
定义callbacklist:
list<Callback<void,T1,T2,T3,T4,T5,T6,T7,T8> > CallbackList;
CallbackList m_callbackList;
TraceValue
: 封装一种基本类型和对应的list<callback>
所有回调的输入形参都是(旧值,新值)。c++ T m_v; TracedCallback<T,T> m_cb;回调输入的两个Arg都是T类型
MakeTraceSourceAccessor
- 生成对应的TraceValue的TraceSourceAccessor
c++ Ptr<const TraceSourceAccessor> MakeTraceSourceAccessor MakeTraceSourceAccessor<TraceValue>;
- 生成对应的TraceValue的TraceSourceAccessor
TraceSourceAccessor::connect()
调用TraceSourceAccessor的connect函数就能把sink(callback)和TraceSource连接起来
7.TypeId
- 创建一个类的时候,要生成与类名对应的TypeID,并SetParent,AddConstructor。