您的位置:首页 > 其它

模板特化用于协议解析的一种用法

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

}

以上的处理通过模板特化方式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: