NVI は non-virtual interface idiom の略。NVI の例。
class GameCharacter
{
public:
int healthValue() const
{
...
int retVal = doHealthValue();
...
return retVal;
}
private:
virtualint doHealthValue() const{...}
};
直接、又は tr1::function を用いた関数ポインタの例。
class GameCharacter;
int defaultHealthCalc(const GameCHaracter& gc);
class GameCharacter
{
public:
typedef std::tr1::function HealthCalcFunc;
explicit GameCharacter(HealthCalcFunc hcf = defaultHealthCalc):
healthFunc(hcf){}
private:
HealthCalcFunc healthFunc;
};
tr1::function を用いた技法は型の自動変換が行なわれるので、強制的に型を縛り付ける関数ポインタよりも柔軟に使うことが出来る。
二つのクラスに分けて各々で継承を行なう典型的なデザインパターンの方法もある。
コメントをする