成员函数指针,C++模板 和command设计模式结合实现的一种命令处理方式

#include<iostream>
#include<vector>
using namespace std;
// 先定义一个Command的基类
class Command
{
public:
    virtual ~Command()
    {
    }

    virtual void Execute() = 0;

protected:
    Command()
    {

    }
};

//  为了能执行多个类的符合某个函数声明的成员函数,这里有个二个变化的点,一个是哪个类? 这个成员函数的函数原型是什么样的。
//  可以分别用模板和成员函数指针来实现。特定类型的对象,以及该对象的成员函数可以一起构造一个Command

template<class Receiver>
class SimpleCommand : public Command
{
public:
     typedef void (Receiver::*Action)();

    SimpleCommand(Receiver* r, Action a) : _receiver(r),_action(a)
    {

    }

    virtual void Execute()
    {
         (_receiver->*_action)();
    }

private:

     Action _action;
    Receiver* _receiver;

};

class MyClass
{
public:
    void redo()
    {
        cout << "in myclass" << endl;
    }

};

class YourClass
{
public:
    void check()
    {
        cout << "check your class" << endl;
    }
};

int main(int argc, char** argv)
{

    MyClass* receiver = new MyClass;

    Command* aCommand = new SimpleCommand<MyClass>(receiver,&MyClass::redo);

    YourClass* youReceiver = new YourClass;

    Command* yCommand = new SimpleCommand<YourClass>(youReceiver,&YourClass::check);

    vector<Command*> commandQueue;
    commandQueue.push_back(aCommand);
    commandQueue.push_back(yCommand);

    for(int i = 0 ; i < commandQueue.size(); i++)
    {
        commandQueue[i]->Execute();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值