$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
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,