1. 程式人生 > >成員函式指標,C++模板 和command設計模式結合實現的一種命令處理方式

成員函式指標,C++模板 和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();
    }

}