C++ (Qt)#ifndef FUNCTIONS_FOR_HEALTHCALC_H#define FUNCTIONS_FOR_HEALTHCALC_H #include "gamecharacter.h" namespace GameStuff { // функция алгоритма по умолчанию для вычисления жизненной силы персонажаint defaultHealthCalc(const GameCharacter& gc); // функции вычисления жизненной силы с разным поведениемint loseHealthQuickly(const GameCharacter& gc);int loseHealthSlowly(const GameCharacter& gc); } #endif // FUNCTIONS_FOR_HEALTHCALC_H
C++ (Qt)namespace GameStuff { class GameCharacter; // функция алгоритма по умолчанию для вычисления жизненной силы персонажаint defaultHealthCalc(const GameCharacter& gc); // функции вычисления жизненной силы с разным поведениемint loseHealthQuickly(const GameCharacter& gc);int loseHealthSlowly(const GameCharacter& gc); }
C++ (Qt)int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); // однотипные персонажи с разным поведением относительно здоровья GameStuff::EvilBadGay ebg1(GameStuff::loseHealthQuickly); GameStuff::EvilBadGay ebg2(GameStuff::loseHealthSlowly); return a.exec();}
C++ (Qt)namespace GameStuff { class GameCharacter{public: GameCharacter(); typedef int (*HealthCalcFunc)(const GameCharacter&); explicit GameCharacter(HealthCalcFunc hcf = defaultHealthCalc) : healthFunc(hcf) {} int healthValue() const; int doHealthValue() const; // int healthValue() const {// return healthFunc(*this);// } private: HealthCalcFunc healthFunc;}; }
C++ (Qt)#ifndef FUNCTIONS_FOR_HEALTHCALC_H#define FUNCTIONS_FOR_HEALTHCALC_H #include "gamecharacter.h" namespace GameStuff { class GameCharacter; // функция алгоритма по умолчанию для вычисления жизненной силы персонажаint defaultHealthCalc(const GameCharacter& gc); // функции вычисления жизненной силы с разным поведениемint loseHealthQuickly(const GameCharacter& gc);int loseHealthSlowly(const GameCharacter& gc); } #endif // FUNCTIONS_FOR_HEALTHCALC_H
C++ (Qt)#include <functional>
C++ (Qt)typedef std::tr1::function HealthCalcFunc;