До C ++ 14
В моем примере у меня есть begin()
для пользовательского итератора. Пока у меня есть это
template<typename T>
inline auto
begin(ISomeIterator<T> &it)
-> RangeForISomeIterator<ISomeIterator<T>>
{
return it;
}
template<typename T>
inline auto
begin(ISomeConstIterator<T> &it)
-> RangeForISomeConstIterator<ISomeConstIterator<T>>
{
return it;
}
Я хотел бы изменить это, чтобы использовать статический тип контекста вызывающей стороны. Давайте назовем фактические реализации TheIterator
и TheConstIterator
, которые являются потомками ISomeIterator<Apple>
и ISomeConstIterator<Apple>
соответственно. Я хотел бы создать RangeForISomeIterator<TheIterator>
, когда вызывается begin(theIt)
и RangeForISomeConstIterator<TheConstIterator>
, когда вызывается begin(theConstIt)
.
begin(U &it)
// where U is a descendant of ISomeIterator<T>
begin(U &it)
// where U is a descendant of ISomeConstIterator<T>