Se puede escribir una plantilla de función back
que los delegados a la función de miembro de contenedores ordinarios y una función normal que los implementos la funcionalidad que falta para las cadenas:
template <typename C>
typename C::reference back(C& container)
{
return container.back();
}
template <typename C>
typename C::const_reference back(const C& container)
{
return container.back();
}
char& back(std::string& str)
{
return *(str.end() - 1);
}
char back(const std::string& str)
{
return *(str.end() - 1);
}
a continuación, puedes decir back(foo)
sin tener que preocuparse de si foo
es una cadena o un vector.
Creo que no es necesario, porque puede hacerlo fácilmente con las funciones proporcionadas. –
Ese argumento también se aplicaría a las clases de contenedor. – Deve