Các mã sau biên dịch tốt trên hệ thống của tôi:vòng lặp để mảng có kích thước khác nhau
#include <array>
#include <type_traits>
static_assert(std::is_same<std::array<int, 5>::iterator,
std::array<int, 7>::iterator>::value, ":(");
Có phải đó là hành vi được bảo đảm theo tiêu chuẩn? Loại trình vòng lặp có độc lập với kích thước mảng không?
Nếu được đảm bảo, có cách nào trừu tượng từ loại phần tử và bỏ qua kích thước không?
template<typename T, size_t n>
void foobar(std::array<T, n>::iterator it)
Tức là, có cách nào để viết mã cụ thể trên mảng mà không đề cập đến kích thước n
?
Lưu ý rằng tôi không muốn sử dụng đến T*
, mặc dù ở chế độ phát hành, trình lặp có thể là T*
.
Có gì sai với 'template void foobar (Itearator_type it)'? –
Lol4t0
@ Lol4t0 Nó quá chung chung và không thỏa mãn cơn khát của tôi về kiến thức? – fredoverflow
Ý tôi là, nếu mã hoạt động cho trình biến đổi _given_, tại sao một mã lệnh áp đặt giới hạn nhân tạo? 2 bình luận này chỉ kết nối với phần cuối của câu hỏi của bạn, về nguyên nhân. – Lol4t0