实际项目中的一个实例

/*
 * 	example.cpp
 *
 *  Created on: 2014-8-20
 *      Author: shopping
 */
#include <stdio.h>
#include <utility>
#include <list>
#include <map>

/*1. 定义一个函数指针*/
typedef void * (* pCreateFun)() ;
/*2. 定义一个pair*/
typedef std::pair<char * ,pCreateFun> Tpair;
/*3. 定义一个maps*/
typedef std::map<char * , pCreateFun> ObjMap;
/*4. 定义一个函数,该函数仅用于测试,故为空*/
static void * CreateInstance(){
}
/*5. 定义一个类*/
class  LocalOPT
{
public:
	static ObjMap * pobjectmap;	
	LocalOPT(char * name,pCreateFun fun)
	{
		if(!pobjectmap) 
		{
			pobjectmap = new ObjMap;
			printf("sys has create a new Map\n");
		}
/*6. 执行一个插入操作*/		
		pobjectmap->insert(Tpair(name,fun));
	};
};
/*7. 初始化类中的成员变量*/		
ObjMap * LocalOPT::pobjectmap = NULL;
/*8. 这个操作很关键,这个操作会初始化LocalOPT类中的成员变量*/		
static LocalOPT ingesteropt = LocalOPT("IM", CreateInstance);   //注意第二个参数,调用函数指针

bool LoadAppLib()
{
/*9. appObj = new ObjMap*/		
	ObjMap * appObj = LocalOPT::pobjectmap;		
	pCreateFun  pfun =NULL;
	ObjMap::iterator mapPtr;

	if(!appObj) 
		return false;// no app class
	std::list<char *>AppList;
	AppList.push_back("Interface");
	AppList.push_back("IM");
	AppList.push_back("RM");
	AppList.push_back("OTM");
	AppList.push_back("HB");

	std::list<char *>::iterator ptr;
	for(ptr = AppList.begin(); ptr != AppList.end(); ptr++)
	{
/*10. 返回的是一个迭代器,如果在appObj中没有查找到*ptr字符串时,就会返回一个NULL*/		
		mapPtr = appObj->find(*ptr);
		printf("*ptr = %s \n",*ptr);
/*11. 所以在这里只有IngestManager在appObj中能被找到,只会执行CreateInstance这个函数*/		
		if(mapPtr != appObj->end())  
		{
			pfun = mapPtr->second;
			pfun();
			//void * pobj = pfun();
		}
	}
	return true;
}
int main(int argc, char ** argv)
{
	
	LoadAppLib();
	return 0;	
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值