使用函数指针分发请求
使用函数指针分发请求来一个实例,
=========TestClass.h
#include <iostream>
class TestBase
{
public:
void static setData( char* buffer )
{
m_pBuffer = buffer;
};
protected:
static char* m_pBuffer;
};
class TestA:public TestBase
{
public:
void static funcA1();
void static funcA2();
void static funcA3();
};
class TestB:public TestBase
{
public:
void static funcB1();
void static funcB2();
void static funcB3();
};
class TestC:public TestBase
{
public:
void static funcC1();
void static funcC2();
void static funcC3();
};
=========TestClass.cpp
#include "TestClass.h"
char* TestBase::m_pBuffer = "";
void TestA::funcA1()
{
std::cout<<"TestA::funcA1"<<std::endl;
std::cout<<m_pBuffer<<std::endl;
}
void TestA::funcA2()
{
std::cout<<"TestA::funcA2"<<std::endl;
std::cout<<m_pBuffer<<std::endl;
}
void TestA::funcA3()
{
std::cout<<"TestA::funcA3"<<std::endl;
std::cout<<m_pBuffer<<std::endl;
}
void TestB::funcB1()
{
std::cout<<"TestB:funcB1"<<std::endl;
std::cout<<m_pBuffer<<std::endl;
}
void TestB::funcB2()
{
std::cout<<"TestB:funcB2"<<std::endl;
std::cout<<m_pBuffer<<std::endl;
}
void TestB::funcB3()
{
std::cout<<"TestB:funcB3"<<std::endl;
std::cout<<m_pBuffer<<std::endl;
}
void TestC::funcC1()
{
std::cout<<"TestC:funcC1"<<std::endl;
std::cout<<m_pBuffer<<std::endl;
}
void TestC::funcC2()
{
std::cout<<"TestC:funcC2"<<std::endl;
std::cout<<m_pBuffer<<std::endl;
}
void TestC::funcC3()
{
std::cout<<"TestC:funcC3"<<std::endl;
std::cout<<m_pBuffer<<std::endl;
}
=========test.cpp
#include <iostream>
#include <map>
#include "TestClass.h"
using namespace std;
typedef void(*FUNC)();
typedef map<int,FUNC> MapFunc;
int main()
{
TestBase::setData( "xxxxxxxxxx" );
TestA::funcA1();
TestBase::setData( "yyyyyyyyyyy" );
TestA::funcA2();
TestC::funcC3();
TestBase::setData( "mmmmmmmmmm" );
FUNC func=&TestA::funcA1;
func();
TestBase::setData( "nnnnnnnnnn" );
MapFunc mapFunc;
mapFunc[1001] = &TestA::funcA1;
mapFunc[1002] = &TestC::funcC2;
mapFunc[1003] = &TestB::funcB3;
mapFunc[1004] = &TestB::funcB2;
int cmd = 1003;
mapFunc[cmd]();
cmd=1004;
mapFunc[cmd]();
getchar();
return 0;
}