Boost logo

Boost Users :

Subject: [Boost-users] question about using boost.function and boost.bind, V1.38
From: Tan, Tom (Shanghai) (TTan_at_[hidden])
Date: 2009-04-03 00:38:45


Can any one please explain to me why the former fails while the latter
compilesThe definition:

 

// usage in a ctor initialisation list ..., where m_button_monitor is of
type ButtonMonitor,

, m_button_monitor(boost::bind(boost::mem_fn(&CView::OnRun), this,
ID_TOOLBUTTON_AUTO))

 

 

//definition 1 of ButtonMonitor that fails

// the error message by MS VC9SP1:

// error C2664:
'programmer_board::ButtonMonitor::ButtonMonitor(boost::function<Signatur
e> &)' :

//cannot convert parameter 1 from 'boost::_bi::bind_t<R,F,L>' to
'boost::function<Signature> &'

//

        class ButtonMonitor

        {

        public:

                ButtonMonitor(boost::function<void()>& f)

                        : m_f(f)

                {

                }

 

                void UpdateStatus(BUTTON_STATUS status)

                {

                                m_f();

                };

 

        private:

                boost::function<void()>& m_f;

        

        };

 

//definition 2 of ButtonMonitor that works

        class ButtonMonitor

        {

        public:

                ButtonMonitor(const boost::function<void()>& f)

                        : m_f(f)

                {

                }

 

                void UpdateStatus(BUTTON_STATUS status)

                {

                 m_f();

                };

 

        private:

                const boost::function<void()>& m_f;

        

        };

Thanks,



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net