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

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

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对象的指针。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5690958.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)