Реализации на С++
Command
Общая реализация на языке С++
template <typename Reseiver>
class Command
{
public:
virtual ~Command() = default;
virtual void execute(shared_ptr<Reseiver>) = 0;
};
template <typename Reseiver>
class ConcreteCommand : public Command<Reseiver>
{
using Action = void(Reseiver::*)();
private:
Action act;
public:
ConcreteCommand(Action a) : act(a) {}
virtual void execute(shared_ptr<Reseiver> r) override { ((*r).*act)(); }
};
class Object
{
public:
virtual void run() = 0;
};
class ConcreteObject : public Object
{
public:
virtual void run() override
{
cout << "Run method;" << endl;
}
};
# include <iostream>
# include <memory>
using namespace std;
int main()
{
shared_ptr<Command<Object>> command = make_shared<SimpleCommand<Object>>(&Object::run);
shared_ptr<Object> obj = make_shared<ConObject>();
command->execute(obj);
}
Last updated
Was this helpful?