跟踪对象变化的方法

时间:2019-05-26 17:31:02

标签: c++

我有一个类MyClass,可以通过调用setX进行修改。 我想知道是否通过调用MyClass来更改isChanged的对象。

在下面的代码中,我不想在每种可以更改对象状态的方法中添加setDirtym_dataChanged

class ChangesHolder
{
private:
  bool m_isChanged;
  // boost::signals2::signal<void()> m_dataChanged;
  // long m_stamps;

public:
  ChangesHolder()
    : m_isChanged{false}
    // , m_stamps{0}
  {
    // m_dataChanged.connect(std::bind(&ChangesHolder::setDirty, this));
  }

  bool isChanged() const
  {
    return m_isChanged;
    // return (m_stamps == 0);
  }

  void resetChanges()
  {
    m_isChanged = false;
    // m_stamps = 0;
  }

protected:
  void setDirty()
  {
    m_isChanged = true;
    // ++m_stamps;
  }
}

class MyClass : public ChangesHolder
{
private:
  int m_x;

public:
  void setX(int x)
  {
    if (m_x != x)
    {
      m_x = x;
      setDirty();
      // m_dataChanged();
    }
  }
}

我想注册这样的方法:

template<typename ... Funcs>
void startTrack(Funcs ... funcs)
{
  auto connect = [&](auto func)
  {
    // connect func to setDirty
  };
  do_foreach(connect, funcs ...);
}

MyClass::MyClass()
{
  startTrack(&MyClass::setX, &MyClass::setY);
}

这怎么办?也许还有其他方法可以做到?

0 个答案:

没有答案