带有boost ::信号的自动更新依赖性类成员

auto-update dependent class members with boost::signal

本文关键字:更新 依赖性 成员 boost 信号 带有      更新时间:2023-10-16

给定类,每当修改参考变量时,都必须更新几个成员变量。我想使用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引用到它被复制的,而不是自身。