Что запрещает шаблон возвращаемого типа (enable_if)? - PullRequest
0 голосов
/ 28 декабря 2011

Ниже приведена выдержка из реализации карты против версии 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))));
    }

На самом деле, эта функция вставка итератора (позиция итератора, const value_type & x) , интересной ее частью является тип возврата ! Что это значит? Из того, что я понимаю, это отключает создание экземпляров шаблона, если value_type (т.е. _Valty ) совпадает с const_iterator .

Но в таком случае, поскольку не существует неявного преобразования из const_iterator в value_type , это выглядит как избыточное.

Я верю, что у меня есть нечто, чего я не понимаю, что это? что запрещает шаблон возвращаемого типа?

1 Ответ

2 голосов
/ 28 декабря 2011

Есть другие insert члены, которые принимают диапазон объектов, [итератор, итератор).

enable_if используется, чтобы избежать проблем с разрешением перегрузки, включив эту функцию, только когда задействованные типы отличаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...