实际项目中的一个实例

/*
 * 	map.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("IngestManager", 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("A3Interface");
	AppList.push_back("IngestManager");
	AppList.push_back("ReportManager");
	AppList.push_back("OverTimeManager");
	AppList.push_back("HeartBeat");

	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;
}

实际项目中的一个实例

时间: 2024-12-15 12:29:10

实际项目中的一个实例的相关文章

EntityFramwork6 在项目中的应用实例

在项目开发中使用的ROM大多采用EntityFramwork去完成,下边给出最新的EntityFramwork在项目中的应用实例 : 一.更新EntityFramwork 在安装.NetFramwor框架时默认安装的时EntityFramwork4.0,打开vs2010 新建一个窗体应用程序EntityTest,升级步骤:选择工具——>扩展管理器——>更新——>更新NuGet程序包管理器——>完成. 二.安装EntifyFromwork程序包到项目中 选择工具——>NuGet

Java项目中每一个类都可以有一个main方法

Java项目中每一个类都可以有一个main方法,但只有一个main方法会被执行,其他main方法可以对类进行单元测试. public class StaticTest { public static void main(String[] args) { Employee[] staff=new Employee[3]; staff[0]=new Employee("Tom",40000); staff[1]=new Employee("Dick",60000); s

oracle性能优化(项目中的一个sql优化的简单记录)

在项目中,写的sql主要以查询为主,但是数据量一大,就会突出sql性能优化的重要性.其实在数据量2000W以内,可以考虑索引,但超过2000W了,就要考虑分库分表这些了.本文主要记录在实际项目中,一个需要查询很慢的sql的优化过程,如果有更好的方案,请在下面留言交流. 很多文章都有关于sql优化的方法,这里就不一一陈述了.如果有需要可以查看博客:https://blog.csdn.net/linhaiyun_ytdx/article/details/79101122 SELECT T.YHBH,

Java算法之递归打破及在真实项目中的使用实例

开心一笑 刚才领导问开发:"你觉得这个项目的最大风险是什么",开发说:"加班猝死" , 气氛尴尬了一分钟!!! 提出问题 1.递归算法简单复习 2.如何实现递归算法与真实项目接口??? 3.如何打破递归算法??? 解决问题 1.首先练习下网上一些递归经典题 1 package com.hwy.test; 2 3 /** 4 * 递归函数测试 5 * Created by Ay on 2016/7/2. 6 */ 7 public class RecursionTes

组装者模式在React Native项目中的一个实战案例

前言 在实际的开发中,如果遇到多个组件有一些共性,我们可以提取一个BaseItem出来,然后在多个组件中进行复用,一种方式是通过继承的方式,而今天我们要说的是另一种方式--组装者模式. 什么是组装者模式? 就是在一个类中封装一些共有特性,然后使得在使用的组件中,可以动态的去添加一些属性或者行为,相比较于继承来说,组装者模式会更加的灵活. 实例演示 /** * AboutCommon.js * 组装者模式 模仿一些生命周期函数 */ export default class AboutCommon

在web项目中搭建一个spring mvc + spring + mybatis的环境

介绍:本文中示范搭建一个ssm环境的框架:使用流程就是客户端通过http请求访问指定的接口,然后由服务器接受到请求处理完成后将结果返回. 本项目请求流程细节介绍:由客户端请求到指定的接口,这个接口是个jsp的页面,在jsp页面中会自动请求jsp中指定的接口,请求到达comcat服务器后由spring mvc提供的DispatchServlet类进行接受,然后将请求交给HandierMapping接口的实现类去解析当前请求的所有参数,再交给HandlerAdaper接口的实现类去将所有参数和对象(

目的:让目标程序在内存中只有一个实例

Q:为什么要实现这个目的?? A:因为有些程序 需要使用电脑上面的硬件,比如串口 采集卡之类的.这样情况下,程序在内存里面就只能 有一份,不然会抢夺硬件资源,造成各种问题. ×××××××××××××××××××××× 实现这个目的可能有很多种方式.不过此处我要使用的是CreateMutex()这个函数. 这个函数被定义在Kernel32里面.这个中文意译就是创建一个互锁. 函数原型: HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttrib

在vue项目中添加一个html页面,开启本地服务器

在vue项目里新增一个不需要登录的页面,那么我只能新增一个html页面了,不经过路由,直接在浏览器输入路径打开,那么就需要用到本地服务器, 1.vue里面的html页面最好放过在public文件夹里面,但是我的vue项目没有public,就只好放在static里面了,这样可以不经过vue的路由 2.然后就是开本地服务器,当然,是基于node的, 1)可以在这里下载 https://nodejs.org,安装完成后可以在控制台输入:node -v 查看版本号 2)下载http-server:在控制

Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作

1>. 创建一个控制台程序2>. 添加一个 ADO.NET实体数据模型,选择对应的数据库与表(StudentModel.edmx)3>. 控件台代码 static void Main(string[] args) { // 创建一个网关接口,TestData是数据库名 TestDataEntities td = new TestDataEntities(); // 创建一个实体对象,Student是表映射过来的对象,将其赋值 Student st1 = new Student(); st