c++ - 跟踪对象更改的方法
问题描述
我有MyClass
可以通过调用修改的类setX
。我想知道一个对象MyClass
是否已通过调用isChanged
.
在下面的代码中,我不喜欢在每个可以改变对象状态的方法中添加setDirty
或。m_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);
}
如何做到这一点,或者也许还有其他方法可以做到这一点?
解决方案
推荐阅读
- java - 使用documents4j转换后删除的文件
- html - 如何使用 CSS 设置固定宽度?
- html - 使用 Bootstrap 为不同的屏幕设置列类
- xml - 使用 xmlstarlet 添加 xml 元素中尚不存在的属性
- python - 从 DataFrame 中获取值
- postgresql - pg_upgrade 工具失败:无效的“未知”用户列
- scala - 比较具有 n 个值的列表的两列,并将数据保存为 scala 中的列表
- wordpress - Siteground 服务器遭到恶意软件攻击
- php - Laravel 数据透视表上的 Uuid
- batch-file - 仅当程序运行时间超过特定持续时间时才关闭批处理文件