tr1 function (memo)

I make the sample code in Item 35 be compiled. Add a line of code to use class directly. It is memo for me to remember it.

 

#include <tr1/memory>
#include <string>
#include <iostream>
#include <tr1/functional>
using namespace std;

class GameCharacter;

int defaultHealthCalc(const GameCharacter& gc);

class GameCharacter {
  public:
    typedef tr1::function<int (const GameCharacter&)> HealthCalcFunc;
    
    explicit GameCharacter(HealthCalcFunc hcf = defaultHealthCalc) 
      : healthFunc(hcf)
    {
    }

    int healthValue() const {
      return healthFunc(*this);
    }

  private:
    HealthCalcFunc healthFunc;
};

// function
short calcHealth(const GameCharacter& gc) {
}

// struct
struct HealthCalculator {
  int operator() (const GameCharacter&) const {
  }
};

// class
class GameLevel {
  public:
    float health(const GameCharacter& gc) const {
    }
};

class EvilBadGuy: public GameCharacter {
  public:
    EvilBadGuy(HealthCalcFunc hcf) : GameCharacter(hcf) {
    }
};

class EyeCandyCharacter: public GameCharacter {
  public:
    EyeCandyCharacter(HealthCalcFunc hcf) : GameCharacter(hcf) {
    }
};

int main(int argc, const char *argv[]) {
  EvilBadGuy ebg1(calcHealth);
  EyeCandyCharacter ecc1(HealthCalculator);

  GameLevel currentLevel;
  EvilBadGuy ebg2(tr1::bind(&GameLevel::health,
                            currentLevel,
                            tr1::placeholders::_1)
      );
  // class is similar to struct
  EvilBadGuy xx(GameLevel);
  return 0;
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值