2011-12-28 22 views
0

以下內容摘自vs 2010的地圖實現,該成員函數在文件xtree中的父類_Tree中定義。返回類型模板(enable_if)禁止什麼?

template<class _Valty> 
    typename _STD tr1::enable_if<!_STD tr1::is_same<const_iterator, 
     typename _STD tr1::remove_reference<_Valty>::type>::value, 
      iterator>::type 
    insert(const_iterator _Where, 
     _Valty&& _Val) 
    { // try to insert node with value _Val using _Where as a hint 
    return (_Insert(_Where, 
     this->_Buynode(_STD forward<_Valty>(_Val)))); 
    } 

其實,這個功能iterator insert (iterator position, const value_type& x),它的有趣的部分是它的返回類型!這是什麼意思?據我所知,如果value_type(即_Valty)與const_iterator相同,它將禁用模板實例化。

但是,在這樣的情況下,由於沒有來自常量性的隱式轉換VALUE_TYPE,這看起來像是多餘的。

我相信我有些東西我不明白,它是什麼?返回類型模板禁止什麼?

回答

2

還有其他insert成員,採取一系列的對象,[迭代器,迭代器]。

enable_if用於避免重載分辨率問題,只有在涉及的類型不同時才啓用此功能。