以下摘自vs 2010地图实现,此成员函数在父类_Tree中定义,该类位于文件xtree中。
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 相同,则禁用模板实例化。
但是,在这种情况下,由于没有从 const_iterator 到 value_type 的隐式转换,这看起来是多余的。
我相信我有一些我不明白的东西,它是什么?返回类型模板禁止什么?
答案 0 :(得分:2)
还有其他insert
成员接受一系列对象,[迭代器,迭代器]。
enable_if
用于通过仅在涉及的类型不同时启用此功能来避免重载解决问题。