Effective C++ Item 35
2009-08-20


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 を用いた技法は型の自動変換が行なわれるので、強制的に型を縛り付ける関数ポインタよりも柔軟に使うことが出来る。

二つのクラスに分けて各々で継承を行なう典型的なデザインパターンの方法もある。

前回次回

[c++(マクロへ移行中)]

コメント(全0件)
コメントをする


記事を書く
 powered by ASAHIネット