在vs2012(c++11)make_pair()改動(dòng):
C++11: template <class T1, class T2> pair<V1, V2> make_pair(T1&& x, T2&& y);如果沒有指定類型,它會(huì)自動(dòng)推導(dǎo).
C++03: template <class T1, class T2> pair<T1, T2> make_pair(T1 x, T2 y);
如果make_pair用在了insert中,建議直接構(gòu)造一個(gè)pair對(duì)象,然后再insert.
比較通用的方法是是static_cast強(qiáng)轉(zhuǎn)成右值引用。
例如:_mapTransportInfos.insert(std::make_pair<uint32, CTransportInfoPtr>(iter_t->m_nID, pinfo));
這句代碼在vs2012的c++11就無法編譯,報(bào)2664錯(cuò)誤。可以用如下強(qiáng)制轉(zhuǎn)換來實(shí)現(xiàn):
_mapTransportInfos.insert(std::make_pair<uint32, CTransportInfoPtr>(static_cast<uint32&&>(iter_t->m_nID),
staic_cast<CTransportInfoPtr&&>(pinfo)));
也可以這樣改:pair<uint32,CTransportInfoPtr> ps = pair<uint32,CTransportInfoPtr>((iter_t->m_nID,pinfo);
_mapTransportInfos.insert(ps);