栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

NS3 源码阅读 Ptr<Object> ObjectFactory::Create (void) const

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

NS3 源码阅读 Ptr<Object> ObjectFactory::Create (void) const

ObjectFactory类中的成员函数Create()。

 ">Ptr

  ObjectFactory::Create (void) const

 {

  NS_LOG_FUNCTION (this);

  ">Callback cb = m_tid.GetConstructor ();

  Objectbase *base = cb ();

  Object *derived = dynamic_cast (base);

  NS_ASSERT (derived != 0);

  derived->SetTypeId (m_tid);

  derived->Construct (m_parameters);

  ">Ptr object = ">Ptr (derived, false);

  return object;

 }

 整体上,create函数返回一个Object基类的智能指针,而这个Object也可以是Object子类中的任何一个。

1、  NS_LOG_FUNCTION (this);

NS_LOG_FUNCTION:必须带一个参数,适用于类的方法,或带参数的静态方法。在类方法中,在记录非静态方法调用的时候,一般将this传入作为第一个参数,如果后面还有参数,则继续传入参数列表;记录静态有参方法的时候,除了不需传入this作为第一个参数以外,其他和非静态方法一致。
LOG_FUNCTION:记录函数调用的信息,程序中使用NS_LOG_FUNCTION来输出信息。

2、  ">Callback cb = m_tid.GetConstructor ();

  ">Callback cb 定义了回调函数的签名格式:返回值为Objectbase类的指针,没有形参。

m_tid  将要被创造的Factory类的TypeId 。

GetConstructor函数全部展示为
Callback< Objectbase * > ns3::TypeId::GetConstructor(void )const
获取构造函数回调,可用于实例化此类型对象。

3、  Objectbase *base = cb ();

 创造了一个Objectbase类的指针实例化对象。

4、  Object *derived = dynamic_cast (base);

将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理,即会作一定的判断。
       对指针进行dynamic_cast,失败返回null,成功返回正常cast后的对象指针;
       对引用进行dynamic_cast,失败抛出一个异常,成功返回正常cast后的对象引用。 

 5、  NS_ASSERT (derived != 0);

断言,判断dynamic_cast是否成功。

 6、derived->SetTypeId (m_tid);

设置 Object类的 TypeId 。

7、  derived->Construct (m_parameters);

设置 Object类的属性参数。

8、   ">Ptr object = ">Ptr (derived, false);

实例化object对象的指针。

9、返回object对象的指针。

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号