Vấn đề bạn có là mặc dù T *
có thể được ngầm chuyển đổi sang một T const *
, hệ thống mẫu không phải là "nhận thức" đó, do đó, một whatever<T *>
và whatever<T const *>
là loại hoàn toàn không liên quan, và không có chuyển đổi ngầm từ một đến người khác.
Để tránh sự cố, tôi có thể tránh phải vượt qua bộ sưu tập. Thay vào đó, tôi sẽ có chức năng lấy một cặp lặp. A list<A *>::iterator
có thể được chuyển đổi hoàn toàn thành list<A *>::const_iterator
. Cho rằng vấn đề, tôi có thể làm cho các chức năng một mẫu, vì vậy nó có thể mất vòng lặp của loại tùy ý.
Điều này có thể giúp bạn tiết kiệm khá nhiều rắc rối - một list
là hiếm khi một lựa chọn tốt của container, vì vậy có một cơ hội rất lớn mà một ngày nào đó bạn sẽ muốn thay đổi từ list<A *>
để vector<A *>
hoặc có lẽ deque<A *>
- - và nếu bạn thực hiện chức năng chung của mình, bạn sẽ có thể làm điều đó mà không cần viết lại hàm nào cả.
Nguồn
2011-01-24 20:53:45
Bạn đã thử chuyển danh sách giống như nó chưa? Nếu vậy, bạn đã nhận được gì? – Oswald
@Oswald, một số lỗi đúc mẫu khủng khiếp – vondip
Thứ gì đó như 'lỗi: chuyển đổi từ 'std :: danh sách >' thành loại vô hướng 'std :: list> 'yêu cầu'? –
James