CN102609293B - 对c/c++进行动态实例化的方法 - Google Patents
对c/c++进行动态实例化的方法 Download PDFInfo
- Publication number
- CN102609293B CN102609293B CN201210013899.1A CN201210013899A CN102609293B CN 102609293 B CN102609293 B CN 102609293B CN 201210013899 A CN201210013899 A CN 201210013899A CN 102609293 B CN102609293 B CN 102609293B
- Authority
- CN
- China
- Prior art keywords
- instantiation
- function
- class
- class name
- macro definition
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供对C/C++进行动态实例化的方法,包括以下步骤:步骤1:定义动态实例化所需信息的结构体;步骤2:定义第一与第二宏定义;步骤3:定义一个实例化函数;步骤4:通过传入的要实例化的类名,调用实例化函数,完成对象的实例化。通过配置数据对C/C++类进行动态实例化,根据从配置数据中的实例化的类名来创建C/C++对象来进行业务处理,从而实现了后台服务的可配置性,大大提高了服务器系统灵活性和业务流程的配置灵活性。
Description
技术领域
本发明涉及对C/C++进行动态实例化的方法,尤其涉及通过配置数据对C/C++类进行动态实例化的方法。
背景技术
随着科技的发展,C/C++语言具有效率高,可移植性强等特点,被广泛应用软件和系统软件开发上。但随着软件系统日趋增加的复杂度,对服务器架构的灵活性也不断增加。为了达到后台服务可配置性,就需要把C/C++的实例化通过配置数据的方式来进行,通过从配置中读取出来的C/C++类名字符串进行实例化操作。而C/C++语言本身并没有这个特性,就无法实现字符串驱动创建实例对象。随着软件的复杂性提高,就会大大降低服务器系统的灵活性及业务流程的配置灵活性。
哈希表:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。通过散列函数,数据元素将被更快地定位,散列函数能使对一个数据序列的访问过程更加迅速有效。本发明利用上述原理可以有效地提高服务器系统的灵活性。
发明内容
本发明的目的在于提供对C++类进行动态实例化的方法,实现了后台服务的可配置型,大大提高了系统灵活性及业务流程的配置灵活性。
为实现上述目的,本发明提供对C/C++进行动态实例化的方法,包括以下步骤:
步骤1:定义动态实例化所需信息的结构体,所述所需信息的结构体包括:类名、动态创建函数的指针、所占内存大小及存储该信息结构的哈希表;
步骤2:定义第一与第二宏定义,所述第一宏定义为动态声明,该动态声明根据类名来定义创建该类对象函数,该函数内部是通过C/C++本身的new操作来完成创建对象操作,并在C/C++类声明时加入该第一宏定义,所述第二宏定义为动态实现,该动态实现将第一宏定义中的信息以及类名信息组织成步骤1所述的结构体,并通过类名的哈希值注册到哈希表中;
步骤3:定义一个实例化函数,所述实例化函数的参数为要实例化的类名;
步骤4:通过传入的要实例化的类名,调用实例化函数,完成对象的实例化。
步骤4中所述实例化函数根据哈希值,在哈希表中得到该类实例化信息,然后调用该信息结构中的函数来创建类的实例,并返回。
本发明的有益效果:本发明提供对C/C++类进行动态实例化的方法,通过配置数据对C/C++类进行动态实例化,根据从配置中读取出来的C++类名字符串进行实例化操作,创建C/C++对象来进行业务处理,从而实现了后台服务的可配置性,大大提高了服务器系统灵活性和业务流程的配置灵活性。
为了能更进一步了解本发明的特征以及技术内容,请参阅以下有关本发明的详细说明与附图,然而附图仅提供参考与说明用,并非用来对本发明加以限制。
附图说明
下面结合附图,通过对本发明的具体实施方式详细描述,将使本发明的技术方案及其它有益效果显而易见。
附图中,
图1为本发明对C/C++类进行动态实例化的方法的步骤示意图。
具体实施方式
为更进一步阐述本发明所采取的技术手段及其效果,以下结合本发明的优选实施例及其附图进行详细描述。
请参阅图1,为本发明对C/C++类进行动态实例化的方法的步骤示意图。本发明包括以下步骤:
步骤1、定义动态实例化所需信息的结构体;
所述步骤1中,定义动态实例化所需信息的结构体:其中包含如类名,动态创建函数的指针,所占内存大小等信息,以及存储该信息结构的哈希表。
步骤2、定义第一与第二宏定义;
所述步骤2中,定义第一与第二宏定义:第一宏定义为动态声明,该宏定义根据类名来定义创建该类对象的函数,该函数内部通过C/C++本身的new操作来完成实例化操作,并在C/C++类声明时加入该宏定义;第二宏定义为动态实现,该宏定义把第一宏定义中的信息以及类名等信息组织成步骤1中的结构体,并通过类名的哈希值注册到哈希表中。
步骤3、定义一个实例化函数;
所述步骤3中,定义一个实例化函数:所有对象的实例化都通过调用该函数来进行。该实例化函数的参数为要实例化的类名。该函数根据类名的哈希值,在哈希表(步骤1)中得到该类实例化信息(步骤1中定义),然后调用信息结构中的函数来创建类的实例,并返回。
步骤4、通过传入的要实例化的类名,调用实例化函数,完成对象的实例化。
所述步骤4中,通过传入的要实例化的类名,调用步骤3中定义的实例化函数,即可完成对象的实例化。
将所有需要动态实例化的C/C++类的信息,如类名、创建函数的地址等信息,通过其类名hash后存放在hash表中,在系统中通过具体的类名,从hash表中找到相应的实例化所需要的信息,然后通过调用其创建的实例化函数来完成类的实例化,实现动态实例化的类统一继承于相同的顶层基类。
以下为本发明一较佳实施例,其步骤如下:
步骤1:定义动态实例化所需信息的结构体:
结构体定义如下:
用来存储信息的哈希表
Typedef struct_tagHashNode<CRMObjectInfo>HASHOBJECTINFOTABLE;
步骤2:定义第一与第二宏定义:
DYN_CLASS_DECLARE(className)
该宏通过className来定义一个创建该类本身对象的一个内联静态函数,该函数内部是通过C++本身的new操作来创建对象的,并将步骤2中的函数声明为友元,以方便操作该类内部成员,该宏放在C++类的声明部分;
DYN_CLASS_IMP(className)
该宏定义实现了将上一个宏定义中实现的创建函数以及className注册到步骤1中定义的哈希表中,该宏放在C++类的定义部分。该宏定义一个当前实现文件可见的RSTClassImp对象。该对象构造的时候将当前类的类名以及类的实例化函数注册到全局哈希表中。
两个宏定义在预处理阶段会被其定义的内容所替代,从而在编译阶段完成了C++类动态实例化所需全部信息的定义。
步骤3:定义一个实例化函数:
DCObject*CreateInstanceImp(const char*className,unsigned intobj_cnt)
此实例化函数为动态创建的接口,流程如下:
1、通过参数className的哈希值来获取相应的C++类的信息;
2、调用相应的CRMObjectInfo结构中的回调函数来创建本身的对象,并返回。
步骤4:通过传入的类名,调用实例化函数,完成对象的实例化。
本发明提供的对C/C++类进行动态实例化的方法,通过配置数据中的类名来进行C/C++类的动态实例化,实现C/C++类的动态实例化。实现服务的可配置化,从而有效提高了系统的灵活性。
以上所述,对于本领域的普通技术人员来说,可以根据本发明的技术方案和技术构思作出其他各种相应的改变和变形,而所有这些改变和变形都应属于本发明权利要求的保护范围。
Claims (1)
1.一种对C/C++进行动态实例化的方法,其特征在于,包括以下步骤:
步骤1:定义动态实例化所需信息的结构体,所述所需信息的结构体包括:类名、动态创建函数的指针、所占内存大小及存储该结构体的哈希表;
步骤2:定义第一与第二宏定义,所述第一宏定义为动态声明,该动态声明根据类名来定义创建类对象函数,该函数内部是通过C/C++本身的new操作来完成创建对象操作,并在C/C++类声明时加入该第一宏定义,所述第二宏定义为动态实现,该动态实现将第一宏定义中的信息以及类名信息组织成步骤1所述的结构体,并通过类名的哈希值注册到哈希表中;
步骤3:定义一个实例化函数,所述实例化函数的参数为要实例化的类名;
步骤4:通过传入的要实例化的类名,调用实例化函数,完成对象的实例化;
步骤4中所述实例化函数根据哈希值,在哈希表中得到类实例化信息,然后调用该结构体中的函数来创建类的实例,并返回。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210013899.1A CN102609293B (zh) | 2012-01-17 | 2012-01-17 | 对c/c++进行动态实例化的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210013899.1A CN102609293B (zh) | 2012-01-17 | 2012-01-17 | 对c/c++进行动态实例化的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102609293A CN102609293A (zh) | 2012-07-25 |
CN102609293B true CN102609293B (zh) | 2015-03-04 |
Family
ID=46526690
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210013899.1A Active CN102609293B (zh) | 2012-01-17 | 2012-01-17 | 对c/c++进行动态实例化的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102609293B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110275789A (zh) * | 2019-06-24 | 2019-09-24 | 恒生电子股份有限公司 | 数据处理方法及装置 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104216708B (zh) * | 2014-08-20 | 2018-08-10 | 北京奇艺世纪科技有限公司 | 一种数据监控的方法和装置 |
CN110737434B (zh) * | 2019-09-29 | 2022-12-06 | 苏州浪潮智能科技有限公司 | 一种对象实例化的方法及装置 |
CN116166412A (zh) * | 2021-11-25 | 2023-05-26 | 中兴通讯股份有限公司 | 系统资源分配代码的生成方法、装置、电子设备和介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101197818A (zh) * | 2006-12-08 | 2008-06-11 | 中兴通讯股份有限公司 | 一种asn.1报文面向对象的处理方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7165056B2 (en) * | 2003-07-25 | 2007-01-16 | Lenovo Singapore Pte, Ltd | Administering devices in dependence upon user metric vectors including relational metrics and location based device control |
-
2012
- 2012-01-17 CN CN201210013899.1A patent/CN102609293B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101197818A (zh) * | 2006-12-08 | 2008-06-11 | 中兴通讯股份有限公司 | 一种asn.1报文面向对象的处理方法 |
Non-Patent Citations (1)
Title |
---|
C++程序设计中的对象实例化方法研究;李章兵等;《计算机工程与应用》;20021231(第24期);第130-133,151页 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110275789A (zh) * | 2019-06-24 | 2019-09-24 | 恒生电子股份有限公司 | 数据处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102609293A (zh) | 2012-07-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20200320057A1 (en) | Asset management system, method, apparatus, and electronic device | |
EP3591510A1 (en) | Method and device for writing service data in block chain system | |
TWI466048B (zh) | 在異質資源域中管理分類系統之技術 | |
US20150227736A1 (en) | Data sharing between multiple applications running on a mobile device | |
US20130246449A1 (en) | Methods and devices for identifying a relationship between contacts | |
US20110004940A1 (en) | Obfuscating identity of a source entity affiliated with a communiqué in accordance with conditional directive provided by a receiving entity | |
US8849854B2 (en) | Method and system for providing detailed information in an interactive manner in a short message service (SMS) environment | |
CN109150677B (zh) | 跨域访问的处理方法、装置及电子设备 | |
WO2016101811A1 (zh) | 一种信息排序方法及装置 | |
CN102609293B (zh) | 对c/c++进行动态实例化的方法 | |
US10666713B2 (en) | Event processing | |
US11303606B1 (en) | Hashing name resolution requests according to an identified routing policy | |
CN108829753A (zh) | 一种信息处理方法及装置 | |
CN109144512B (zh) | 一种生成api的方法和系统 | |
US20210389976A1 (en) | Techniques to facilitate a migration process to cloud storage | |
JP6263547B2 (ja) | ユーザ記述子を使用するソーシャル・ネットワーキング・システム・ユーザへのサードパーティ通信 | |
CN104811458A (zh) | 一种信息的展示方法及装置 | |
JP2019509567A (ja) | アプリケーション(app)のためのリソースロード方法、サービス機能実施方法及び装置 | |
GB2507552A (en) | Improving local context search results | |
US20190303933A1 (en) | Novel application of blockchain data structure for insurance certificate management | |
US9741060B2 (en) | Recursive navigation in mobile CRM | |
US10530725B2 (en) | Architecture for large data management in communication applications through multiple mailboxes | |
US20150215452A1 (en) | Method and system for providing advanced address book functionality in a universal plug and play home network environment | |
WO2024092932A1 (zh) | 交易执行方法和区块链节点 | |
US20100017810A1 (en) | Application integration in networked computing devices |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |