Poniższy kod kompiluje grzywny na moim systemie:Iteratory do tablic o różnych rozmiarach
#include <array>
#include <type_traits>
static_assert(std::is_same<std::array<int, 5>::iterator,
std::array<int, 7>::iterator>::value, ":(");
Czy to zachowanie gwarantowane przez standard? Czy typ iteratora jest niezależny od rozmiaru tablicy?
Jeśli jest to zagwarantowane, czy istnieje sposób na streszczenie z rodzaju elementu i zignorować rozmiar?
template<typename T, size_t n>
void foobar(std::array<T, n>::iterator it)
To znaczy, czy jest jakiś sposób, aby napisać powyższy kod array specyficzne, nie wspominając o wielkości n
?
Należy pamiętać, że nie chcę odwoływać się do T*
, nawet jeśli w trybie zwolnienia iterator prawdopodobnie jest T*
.
Co jest nie tak z 'szablonem void foobar (Itearator_type it)'? –
Lol4t0
@ Lol4t0 To zbyt ogólne i nie zaspakaja mojego pragnienia wiedzy? – fredoverflow
Mam na myśli, jeśli kod działa na _given_ iterator, dlaczego miałby narzucać sztuczne ograniczenie? Te 2 komentarze dotyczą tylko ostatniej części twojego pytania, przyczyny. – Lol4t0