使用boost :: signal自动更新依赖类成员

时间:2013-01-01 15:46:08

标签: c++ boost

给定一个类,有几个成员变量必须在修改引用变量时更新。我想使用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); 
}

问题&GT;这个设计有任何潜在的问题吗?有没有更好的方法来完成这种任务?

1 个答案:

答案 0 :(得分:0)

禁用AutoUpdateClass::AutoUpdateClass(AutoUpdateClass const&)AutoUpdateClass& AutoUpdateClass::operator=(AutoUpdateClass const&)

或者正确实施它们。

正如所写的那样,AutoUpdateClass的副本带有它的复制品,而不是它本身。