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

What does the return type template(enable_if) prohibit?

本文关键字:if 禁止 什么 enable 返回类型      更新时间:2023-10-16

以下摘自vs 2010 map实现,该成员函数在父类_Tree中定义,该类_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_iteratorvalue_type的隐式转换,因此这看起来是多余的。

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

还有其他的insert成员接受一个对象范围,[iterator, iterator)。

enable_if仅在涉及的类型不同时启用此功能,以避免过载解析的问题。