模板特化用于协议解析的一种用法
2008-06-10 19:05
501 查看
//MessageHandler.h
#pragma once
#include<stdio.h>
struct Position { int x; int y;};
struct MonsterID {int id;};
template<class T>class MessageHandle
{
public:
MessageHandle(void){}
~MessageHandle(void){}
T* GetData(){return &data;}
virtual void Exec(){printf("there is none excuted............/n");}
protected:
T data;
};
// TestProtecalPrase.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <string>
#include <conio.h>
#include "MessageHandle.h"
using namespace std;
#define MSG_1 1
#define MSG_2 2
#define MSG_3 3
#define MSG_4 4
template<long> static void PKParseSC(string str);
void Print(int i,string str){ printf("Message%d: %s/n",i,str.c_str());}
enum TestEnum{ E1, E2, E3,};
void MessageHandle<Position>::Exec()
//这个是在接受模块声明的,这样要与目标类交互数据必须是通过页面级别的全局变量交互数据
{
printf("Position have been called............/n");
printf("Point value is(%d,%d)/n",GetData()->x,GetData()->y );
}
int _tmain(int argc, _TCHAR* argv[])
{
string arr[4]={"value1","value2","value3","value4" };
for (int i=1;i<=4;i++)
{
switch(i)
{
case MSG_1:
PKParseSC<MSG_1>(arr[i-1]);
break;
case MSG_2:
PKParseSC<MSG_2>(arr[i-1]);
break;
case MSG_3:
PKParseSC<MSG_3>(arr[i-1]);
break;
case MSG_4:
PKParseSC<MSG_4>(arr[i-1]);
break;
default:
break;
}
}
getch();
return 0;
}
void PKParseSC<MSG_1>(string str)//这里采用模板的方式,免去用那个虚函数还要select--case的麻烦{ printf("this is message1/n");
MessageHandle<Position>* msg;
msg=new MessageHandle<Position>();
//这里不能马上实例化,而是必须用指针 //Position * p=msg.GetData(); //p->x=10; //p->y=20;
msg->GetData()->x=10;
//这里相当于接到网络消息,然后通过exec发送到不同文件中,这里再搞一次目的就是为了模块的划分
msg->GetData()->y=20;
msg->Exec();
delete msg;
Print(MSG_1,str);
}
void PKParseSC<MSG_2>(string str)
{
printf("this is message2/n");
MessageHandle<MonsterID> msg;
msg.Exec();
Print(MSG_2,str);
}
void PKParseSC<MSG_3>(string str)
{
printf("this is message3/n");
Print(MSG_3,str);
}
void PKParseSC<MSG_4>(string str)
{
printf("this is message4/n");
Print(MSG_4,str);
}
以上的处理通过模板特化方式
#pragma once
#include<stdio.h>
struct Position { int x; int y;};
struct MonsterID {int id;};
template<class T>class MessageHandle
{
public:
MessageHandle(void){}
~MessageHandle(void){}
T* GetData(){return &data;}
virtual void Exec(){printf("there is none excuted............/n");}
protected:
T data;
};
// TestProtecalPrase.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <string>
#include <conio.h>
#include "MessageHandle.h"
using namespace std;
#define MSG_1 1
#define MSG_2 2
#define MSG_3 3
#define MSG_4 4
template<long> static void PKParseSC(string str);
void Print(int i,string str){ printf("Message%d: %s/n",i,str.c_str());}
enum TestEnum{ E1, E2, E3,};
void MessageHandle<Position>::Exec()
//这个是在接受模块声明的,这样要与目标类交互数据必须是通过页面级别的全局变量交互数据
{
printf("Position have been called............/n");
printf("Point value is(%d,%d)/n",GetData()->x,GetData()->y );
}
int _tmain(int argc, _TCHAR* argv[])
{
string arr[4]={"value1","value2","value3","value4" };
for (int i=1;i<=4;i++)
{
switch(i)
{
case MSG_1:
PKParseSC<MSG_1>(arr[i-1]);
break;
case MSG_2:
PKParseSC<MSG_2>(arr[i-1]);
break;
case MSG_3:
PKParseSC<MSG_3>(arr[i-1]);
break;
case MSG_4:
PKParseSC<MSG_4>(arr[i-1]);
break;
default:
break;
}
}
getch();
return 0;
}
void PKParseSC<MSG_1>(string str)//这里采用模板的方式,免去用那个虚函数还要select--case的麻烦{ printf("this is message1/n");
MessageHandle<Position>* msg;
msg=new MessageHandle<Position>();
//这里不能马上实例化,而是必须用指针 //Position * p=msg.GetData(); //p->x=10; //p->y=20;
msg->GetData()->x=10;
//这里相当于接到网络消息,然后通过exec发送到不同文件中,这里再搞一次目的就是为了模块的划分
msg->GetData()->y=20;
msg->Exec();
delete msg;
Print(MSG_1,str);
}
void PKParseSC<MSG_2>(string str)
{
printf("this is message2/n");
MessageHandle<MonsterID> msg;
msg.Exec();
Print(MSG_2,str);
}
void PKParseSC<MSG_3>(string str)
{
printf("this is message3/n");
Print(MSG_3,str);
}
void PKParseSC<MSG_4>(string str)
{
printf("this is message4/n");
Print(MSG_4,str);
}
以上的处理通过模板特化方式
相关文章推荐
- FluorineFx ASObject自动转换基础类 AutoParseASObject ,用于Flash AMF协议解析
- (OK) patent-1 (专利-1) 一种用于移动互联网协议的测试平台及测试方法
- flex和bison的用于加载和解析配置文件(参考freeDiameter用法)
- android handler的两种用法(一种UI线程,另一种用于执行异步任务)
- ICMP协议规范:一种用于网络管理的协议。对照它您可以想一想PING命令实现的机理
- ICMP协议规范:一种用于网络管理的协议。对照它您可以想一想PING命令实现的机理
- ICMP协议规范:一种用于网络管理的协议。对照它您可以想一想PING命令实现的机理
- rtp协议解析
- pthread_cond_wait用法解析与案例
- SSDP协议内容解析
- ServletContextListener 解析用法
- springMvc注解@RequestParam用法解析
- js中的join(),reverse()与 split()函数用法解析
- iOS关于UITextView的基本用法属性和协议
- Win32关键区的一种典型用法
- iOS远程真机之iTunes与iPhone的通信协议usbmuxd解析
- Netty实现按字节解析的socket协议
- 完成端口的深入理解及一种变态用法
- _IO,_IOR,_IOW,_IOWR 宏的用法与解析
- c语言中static和extern的用法详细解析