0

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

Question> 这个设计有没有潜在的问题?有没有更好的方法来完成这种任务?

4

1 回答 1

0

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

或正确实施它们。

如所写,一个副本AutoUpdateClass带有引用它被复制的那个,而不是它本身。

于 2013-01-01T15:57:25.267 回答