关键词搜索

源码搜索 ×
×

tars源码分析之9

发布2022-07-03浏览438次

详情内容

动态运行时的类怎么定义,也很直观了:

  1. #include "util/tc_dyn_object.h"
  2. #include <string.h>
  3. namespace tars
  4. {
  5. /**********************************TC_DYN_RuntimeClass定义***********************************/
  6. TC_DYN_RuntimeClass* TC_DYN_RuntimeClass::pFirstClass = NULL;
  7. TC_DYN_Object* TC_DYN_RuntimeClass::createObject()
  8. {
  9. if (m_pfnCreateObject == NULL)
  10. {
  11. return NULL;
  12. }
  13. TC_DYN_Object* pObject = (*m_pfnCreateObject)();
  14. {
  15. return pObject;
  16. }
  17. }
  18. TC_DYN_RuntimeClass* TC_DYN_RuntimeClass::load(const char *szClassName)
  19. {
  20. TC_DYN_RuntimeClass* pClass;
  21. for (pClass = pFirstClass; pClass != NULL; pClass = pClass->m_pNextClass)
  22. {
  23. if (strcmp(szClassName, pClass->m_lpszClassName) == 0)
  24. return pClass;
  25. }
  26. return NULL;
  27. }
  28. /**********************************szTC_DYN_Object定义***********************************/
  29. TC_DYN_RuntimeClass TC_DYN_Object::classTC_DYN_Object =
  30. {
  31. (char*)"TC_DYN_Object",
  32. sizeof(TC_DYN_Object),
  33. NULL,
  34. NULL,
  35. NULL
  36. };
  37. static TC_DYN_Init _init_TC_DYN_Object(&TC_DYN_Object::classTC_DYN_Object);
  38. TC_DYN_RuntimeClass* TC_DYN_Object::GetRuntimeClass() const
  39. {
  40. return &TC_DYN_Object::classTC_DYN_Object;
  41. }
  42. bool TC_DYN_Object::isKindOf(const TC_DYN_RuntimeClass* pClass) const
  43. {
  44. TC_DYN_RuntimeClass* pClassThis = GetRuntimeClass();
  45. while (pClassThis != NULL)
  46. {
  47. if (pClassThis == pClass)
  48. {
  49. return true;
  50. }
  51. pClassThis = pClassThis->m_pBaseClass;
  52. }
  53. return false;
  54. }
  55. }

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载