El siguiente código compila bien en mi sistema:Iteradores a matrices de diferentes tamaños
#include <array>
#include <type_traits>
static_assert(std::is_same<std::array<int, 5>::iterator,
std::array<int, 7>::iterator>::value, ":(");
es que el comportamiento que garantiza el estándar? ¿El tipo de iterador es independiente del tamaño de la matriz?
Si está garantizado, ¿hay alguna forma de abstraer del tipo de elemento e ignorar el tamaño?
template<typename T, size_t n>
void foobar(std::array<T, n>::iterator it)
Es decir, ¿hay alguna manera de escribir el código específica de la matriz anterior sin mencionar el tamaño n
?
Tenga en cuenta que no deseo recurrir a T*
, aunque en modo de lanzamiento el iterador probablemente sea T*
.
¿Qué pasa con 'template void foobar (Itearator_type it)'? –
Lol4t0
@ Lol4t0 ¿Es demasiado general y no satisface mi sed de conocimiento? – fredoverflow
Quiero decir, si el código funciona para _given_ iterator, ¿por qué debería uno imponer una limitación artificial? Estos 2 comentarios solo están relacionados con la última sección de tu pregunta, de la causa. – Lol4t0