|
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