带有boost ::信号的自动更新依赖性类成员
auto-update dependent class members with boost::signal
给定类,每当修改参考变量时,都必须更新几个成员变量。我想使用boost::signal
帮助更新所有因变量。
这是代码。
#include <functional>
#include "boost/signal.hpp"
#include "boost/ref.hpp"
#include "boost/bind.hpp"
template<class T>
class AutoElement
{
public:
AutoElement(T t) : m_element(t) {}
typedef boost::function<void () > Handler;
void Register(Handler h)
{ m_signal.connect(h); }
void operator() ()
{ m_signal(); }
void SetElement(T t)
{ m_element = t; }
T GetElement() const
{ return m_element; }
private:
T m_element;
boost::signal<void ()> m_signal;
};
class AutoUpdateClass
{
public:
AutoUpdateClass() : m_iBase(0)
{
m_iBase.Register(boost::bind(&AutoUpdateClass::UpdateNumber,
boost::ref(*this)));
m_iBase(); // trigger handler(s)
}
void UpdateBase(int b)
{
m_iBase.SetElement(b);
m_iBase(); // trigger handler(s)
}
private:
void UpdateNumber() // m_iNumber is depended on m_iBase
{ m_iNumber = m_iBase.GetElement() * 2; }
private:
AutoElement<int> m_iBase; // the reference variable
int m_iNumber; // the variable depends on m_iBase
};
int main()
{
AutoUpdateClass auc;
// first m_iBase will be set and then m_iNumber will be updated.
auc.UpdateBase(40);
}
问题>该设计是否有潜在的问题?有更好的方法可以执行此类任务吗?
禁用AutoUpdateClass::AutoUpdateClass(AutoUpdateClass const&)
和AutoUpdateClass& AutoUpdateClass::operator=(AutoUpdateClass const&)
。
或正确实施它们。
作为书面,AutoUpdateClass
的副本带有IT引用到它被复制的,而不是自身。
相关文章:
- 从C++本机插件更新Vector3数组
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- cmake更新缓存的变量
- 更新到莫哈韦后出现cmath错误
- OpenMP:并行更新数组总是需要减少数组吗
- 为什么我的变量没有更新,我的 LED 没有亮起?
- 指针没有更新它在void函数内部指向的值
- 如何在c++中获取要更新的值
- 已修改的LinkedList未在文本文件本身中更新
- Qt:当QListView获得新条目时,如何更新QStringList
- 更新的矢量元素不打印
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 如何在ECS框架中更新组件数据和通知系统
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- 如果我想在没有更新编译器的情况下使用新功能,该怎么办?
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 在 emscripten 网页汇编正在运行期间更新进度条?
- 在运行时使用范围更新结果
- 带有boost ::信号的自动更新依赖性类成员