Trong C++ 98, tôi thường sử dụng sau đây để khai báo một biến trong kiểu giá trị của một iterator:Làm thế nào để khai báo giá trị của một iterator qua decltype
typename std::iterator_traits<Iterator>::value_type value;
Trong C++ chúng ta có 11 decltype và tôi đã nghĩ cách dễ nhất để suy ra kiểu giá trị là:
decltype(*iterator) value;
Thật không may cho hầu hết các vòng lặp, các loại * iterator là value_type & và không VALUE_TYPE. Bất kỳ ý tưởng, mà không có các lớp sửa đổi loại, làm thế nào để xoa bóp ở trên vào năng suất value_type (và không phải bất kỳ tài liệu tham khảo)?
Tôi không nghĩ rằng câu hỏi này là không hợp lý vì sau đây là khá mạnh nhưng cuối cùng lại tạo ra một biến khác.
auto x = *iterator;
decltype(x) value;
Cũng lưu ý rằng tôi thực sự muốn suy luận kiểu và không chỉ là một ví dụ ví dụ nếu tôi muốn khai báo một std :: vector của các giá trị này.
Loại biểu thức '* iterator' là' std :: iterator_traits :: reference', không phải 'value_type'. Điều này không nhất thiết là 'value_type &' và 'decltype' có thể báo cáo loại biểu thức khác với thực tế là tùy thuộc vào danh mục giá trị của nó. –
Nếu bạn * chỉ * muốn kết hợp hai dòng chỉnh sửa của bạn, tương đương sẽ là 'typename std :: decay :: type value;', nhưng hãy kiểm tra câu trả lời bên dưới và chỉ don ' t làm điều đó :) Tôi chỉ cần thêm này như ['std :: decay'] (http://en.cppreference.com/w/cpp/types/decay) đã không được đề cập trong Q/A này trước đây. –