使用函数指针分发请求

使用函数指针分发请求来一个实例,

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

posted @ 2014-09-08 03:05  孤火  阅读(164)  评论(0编辑  收藏  举报