Obtenir un itérateur inverse, à partir d'un avant itérateur sans connaître le type de la valeur

Je suis en train de mettre en œuvre certaines STL-style algorithmes de tri. Le prototype de std::sort ressemble à quelque chose comme ceci (à partir de cplusplus.com):

template <class RandomAccessIterator>
void sort ( RandomAccessIterator first, RandomAccessIterator last );

La fonction est généralement appelé comme ça (bien que le type de conteneur peut varier):

std::vector<int> myVec;
//Populate myVec
std::sort(myVec.begin(), myVec.end());

J'ai dupliqué le prototype de std::sort pour ma propre fonction de tri. Pour itérer sur les conteneurs doivent être triés, je ne les suivants:

template <class RandomAccessIterator>
void mySort(RandomAccessIterator first, RandomAccessIterator last) {  
  RandomAccessIterator iter;
  for (iter = first; iter != last; ++iter) {
    //Do stuff
  }
}

Assez facile. Mais que faire si je veux utiliser un itérateur inverse? Ce serait pratique dans des algorithmes de tri d'un conteneur à partir de deux extrémités, par exemple cocktail de tri.

Est-il possible d'obtenir un itérateur inverse de la itérateurs qui sont passés en paramètres? Si je savais que le type de conteneur à l'avance, je pourrais faire quelque chose comme ceci:

template <class RandomAccessIterator>
void mySort(RandomAccessIterator first, RandomAccessIterator last) {
  std::vector<int>::reverse_iterator riter(last);
  std::vector<int>::reverse_iterator rend(first);
  for ( ; riter != rend; ++riter) {
    //Do stuff
  }
}    

Malheureusement, je ne pas savoir le type de conteneur. Ce que j'ai vraiment besoin de faire est quelque chose comme ceci:

template <class RandomAccessIterator>
void mySort(RandomAccessIterator first, RandomAccessIterator last) {
  RandomAccessIterator riter = reverse_iterator(last);
  RandomAccessIterator rend = reverse_iterator(begin);
  for ( ; riter != rend; ++riter) {
    //Do stuff
  }
}

Est-il un moyen de le faire sans avoir à passer dans le sens inverse des itérateurs comme paramètres supplémentaires (ce qui permettrait de résoudre le problème, mais faire le prototype de fonction moins intuitif)?

Remarque que j'ai besoin à la fois de l'avant et inverse des itérateurs dans ma mise en œuvre, de sorte que l'appel de la fonction de cette manière

std::vector<int> myVec;
//Populate myVec
mySort(myVec.rbegin(), myVec.rend());

ne fonctionnera pas.