返回类型模板(enable_if)禁止什么?

时间:2011-12-28 08:37:39

标签: c++ visual-studio-2010 visual-c++ c++11

以下摘自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 的隐式转换,这看起来是多余的。

我相信我有一些我不明白的东西,它是什么?返回类型模板禁止什么?

1 个答案:

答案 0 :(得分:2)

还有其他insert成员接受一系列对象,[迭代器,迭代器]。

enable_if用于通过仅在涉及的类型不同时启用此功能来避免重载解决问题。