久しぶりにプログラミングネタ
ゲームプログラミングに役に立つか。
俺のレベルが知れるな。。。
もっと良い方法があれば教えてください(ぉ
多分、ヌケもあると思われ
クラスの命名も適当

/*
今回代入された値と、前回まで保持していた値が不一致だった場合、「IsChange()」がtrueを返す。
たとえば、毎フレーム下記のような処理が実行される場合、、、、

ChangeValue<long> m_value;

m_value = m_Object.GetValue();
if( m_value.IsChange() ){
  //結構重い処理
}

毎フレーム重い処理を実行すると非効率なので、値が変わったときのみ処理を実行したい場合に使用する。

*/

template< typename T >
class ChangeValue{
public:
  ChangeValue() : m_NowValue( T() ), m_PrevValue( T() )
  {
  }

  bool IsChange() const { return m_NowValue != m_PrevValue; }

  const ChangeValue & operator = ( const T &val ){
    m_PrevValue = m_NowValue;
    m_NowValue = val;
    return *this;
  }

  const ChangeValue & operator = ( const ChangeValue &src ){
    m_PrevValue = src.m_PrevValue;
    m_NowValue = src.m_NowValue;

    return *this;
  }

  operator T(){
    return m_NowValue;
  }
private:
  T  m_NowValue;
  T  m_PrevValue;
};


はぁ、、、、(;´Д`)

ところで、 コンストラクタの初期化で 例えば、m_value( int() ) って合法?