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
  • 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>;
  • TraceSourceAccessor::connect() 调用TraceSourceAccessor的connect函数就能把sink(callback)和TraceSource连接起来

7.TypeId

  • 创建一个类的时候,要生成与类名对应的TypeID,并SetParent,AddConstructor。

最新文章

  1. Css--深入学习之折角效果
  2. SecureCRT在远程主机和本地之间传输文件
  3. 撰写合格的REST API
  4. centos7下yum安装mysql
  5. IOC Container(服务容器)的工作机制
  6. Unix Linux 编程书籍
  7. 遇到 Error creating the Web Proxy specified in the &#39;system.net/defaultProxy&#39; configuration section的解决办法
  8. CString string char* char 之间的字符转换(多种方法)
  9. C#网络编程简单实现通信小例子-1
  10. goahead webserver源码分析
  11. 一个好用的Dialog插件
  12. js垃圾回收机制
  13. 网络1712--c语言函数作业总结
  14. opencv基本图像操作
  15. 《C和指针》---指针
  16. django引入现有数据库 转
  17. HBuild 连接苹果手机
  18. FarBox的建站过程
  19. SQL RAISERROR 用法
  20. 【Java----创建多级文件夹】

热门文章

  1. geotrellis使用(十二)再记录一次惨痛的伪BUG调试经历(数据导入以及读取瓦片)
  2. JavaScript 框架设计
  3. android 伸缩控件ExpandableListView 展开失败的可能原因。
  4. Oracle Recovery 01 - 常规恢复之完全恢复
  5. Your account already has a valid iOS Distribution certificate!
  6. Android AlertDialog去除黑边白边自定义布局(转)
  7. 利用Swashbuckle生成Web API Help Pages
  8. C++异常处理: try,catch,throw,finally的用法
  9. 在 .NET 中远程请求 https 内容时,发生错误:根据验证过程,远程证书无效。
  10. IIS 配置Http重定向到Https