ObjectFactory类中的成员函数Create()。
">Ptr
ObjectFactory::Create (void) const
{
NS_LOG_FUNCTION (this);
">Callback
cb = m_tid.GetConstructor (); Objectbase *base = cb ();
Object *derived = dynamic_cast
NS_ASSERT (derived != 0);
derived->SetTypeId (m_tid);
derived->Construct (m_parameters);
">Ptr
return object;
}
整体上,create函数返回一个Object基类的智能指针,而这个Object也可以是Object子类中的任何一个。
1、 NS_LOG_FUNCTION (this);
NS_LOG_FUNCTION:必须带一个参数,适用于类的方法,或带参数的静态方法。在类方法中,在记录非静态方法调用的时候,一般将this传入作为第一个参数,如果后面还有参数,则继续传入参数列表;记录静态有参方法的时候,除了不需传入this作为第一个参数以外,其他和非静态方法一致。
LOG_FUNCTION:记录函数调用的信息,程序中使用NS_LOG_FUNCTION来输出信息。
2、 ">Callback
">Callback
m_tid 将要被创造的Factory类的TypeId 。
GetConstructor函数全部展示为
Callback< Objectbase * > ns3::TypeId::GetConstructor(void )const
获取构造函数回调,可用于实例化此类型对象。
3、 Objectbase *base = cb ();
创造了一个Objectbase类的指针实例化对象。
4、 Object *derived = dynamic_cast
将一个基类对象指针(或引用)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对象的指针。
9、返回object对象的指针。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)