boost::bind替换为lambda

convenient_json jobj;
typedef boost::signal<void(convenient_json)> signal_json_type;
map<SHOW_FLAG,boost::shared_ptr<signal_json_type>>::iterator it = m_reg_global_module.find(flag);
boost::bind(&signal_json_type::operator(), it->second, jobj);
里面的bind如何用lambda替换

就是函数调用,多一个参数,你这就是直接函数调用好了

&it->second {
signal_json_type(it->second, jobj);
}

谢谢你的回答,不过我需要将boost::bind作为参数使用,我贴一下代码,麻烦帮忙看一下

bool UiDisplayMgrImpl::update_ui(SHOW_FLAG flag,jobject jobj)
{
bool rg_flag = false;
lock(flag);
if(!m_exam_pro_status)
{
unlock();
return false;
}
map>::iterator it = m_reg_json_module.find(flag);//在别的地方已经存入
if(it != m_reg_json_module.end())
{
thread_context_switch::CmdWrapper(boost::bind((&signal_json_type::operator()), it->second, jobj))(); //就是这句,vs2010不会报错,2013却报 “boost::bind”: 对重载函数的调用不明确
//所以我想用lambda来替换,可是水平有限,不知道如何替换
rg_flag = true;
}
unlock();
return rg_flag;
}

这个是thread_context_switch命名空间的实现
namespace thread_context_switch
{
using namespace unique_key;
class CUIThreadWnd;
class CUIThreadMgrImpl
{
private:
friend struct Loki::CreateUsingNew;
CUIThreadMgrImpl(void);
~CUIThreadMgrImpl(void);
public:
bool RegisterInstance();
void PostCmd(boost::function const& cmd);
void ExecCmd(std::string key);
private:
boost::shared_ptr m_hiddenWnd;
std::map > m_keyCmdMap;
//boost::mutex m_mutex;
HANDLE m_mutex;
};
typedef Loki::SingletonHolder CUIThreadMgr;

template<class T>
class CmdWrapperImpl
{
public:
    CmdWrapperImpl(T cmd):m_cmd(cmd){}
    typedef typename T::result_type result_type;    
    void operator()() const
    {
        CUIThreadMgr::Instance()->PostCmd(m_cmd);
    }

    template<class A1> void operator()(A1 & a1) const
    {
        boost::function<result_type(A1)> tmpCmd(m_cmd);
        boost::function<result_type()> cmd2 = boost::bind(boost::apply<result_type>(),tmpCmd,a1);
        CUIThreadMgr::Instance()->PostCmd(cmd2);
    }

    template<class A1, class A2> void operator()(A1 & a1, A2 & a2) const
    {
        boost::function<result_type(A1,A2)> tmpCmd(m_cmd);
        boost::function<result_type()> cmd2 = boost::bind(boost::apply<result_type>(),tmpCmd,a1,a2);
        CUIThreadMgr::Instance()->PostCmd(cmd2);
    }

    template<class A1, class A2, class A3> void operator()(A1 & a1, A2 & a2, A3 & a3) const
    {
        boost::function<result_type(A1,A2,A3)> tmpCmd(m_cmd);
        boost::function<result_type()> cmd2 = boost::bind(boost::apply<result_type>(),tmpCmd,a1,a2,a3);
        CUIThreadMgr::Instance()->PostCmd(cmd2);
    }
private:
    T m_cmd;
};
template<class T>
CmdWrapperImpl<T> CmdWrapper(T fun)
{
    return CmdWrapperImpl<T>(fun);
}

}