Чтобы получить «более простой для запоминания» интерфейс для функции генерации индекса std :: distance (a, b), я подошел с помощью идея лучшего различения это аргументы (при использовании против основания вектора: vec.begin()) путем вызова шаблонный функции с вектором и его итератора, как:std :: vector и его итератор как единый шаблон typename
std::vector<MyType> vect;
std::vector<MyType>::const_iterator iter;
...
...
size_t id = vectorindex_of(iter, vect);
с обоснование того, чтобы никогда не вводить в заблуждение порядок аргументы ;-)
Явная формулировка вышеприведенной идеи будет читать sth. например
template <typename T>
inline
size_t vectorindex_of(
typename std::vector<T>::const_iterator iter,
const std::vector<T>& vect) {
return std::distance(vect.begin(), iter);
}
... который работает, но выглядит неудобно.
Я хотел бы иметь механизм шаблонов неявно выводим типам как (псевдо-код):
template <typename T>
inline
size_t vectorindex_of(T::const_iterator iter, const T& vect) {
return std::distance(vect.begin(), iter);
}
... который не работает. Но почему?
Спасибо за указание этого простого исправления. Я бы хотел отметить оба ваши ответа как «принятый ответ», но возможно только одно ;-) –