Tôi có một vấn đề mà khi tôi sử dụng một cái gì đó như thế này:Làm thế nào để trở về "không tìm thấy" khi giá trị trả về là const tham khảo
const MyList& my_list = getListForThisRegion(/*region ID, ...*/);
Tôi không biết những gì sẽ trở về khi không có giá trị được tìm thấy.
Vấn đề của tôi là tôi muốn có cách để báo hiệu (khi trả lại giá trị từ getListForThisRegion
) "không tìm thấy giá trị" cho người gọi. Nếu tôi trả lại một con trỏ, tôi có thể trả về nullptr
, nhưng tôi không biết cách thực hiện nó với các tham chiếu. Tất cả tôi có thể nghĩ là có một số thành viên tĩnh not_found
của loại MyList
, và trở về một tham chiếu đến nó, nhưng nó có vẻ xấu xí.
Và có, tôi không thể trả về giá trị vì danh sách "béo" và thường được sử dụng.
EDIT: tấn câu trả lời tuyệt vời, nhưng ngoại lệ không phải là giải pháp có thể chấp nhận được vì số lần nó được nâng cao là cao (tỷ lệ phần trăm nbNotFound/nbCalls
cao).
EDIT2: liên quan đến tăng :: tùy chọn - phức tạp như thế nào để làm chủ? Tôi có nghĩa là nó đòi hỏi một số kiến thức không rõ ràng (không rõ ràng = cái gì đó không chỉ đơn giản là biết cú pháp)?
ném ngoại lệ có thể là một lựa chọn tốt. – BigMike
bạn cũng có thể muốn xem 'tăng :: tùy chọn' – Akanksh
Tham chiếu phải đề cập đến một đối tượng, vì vậy bạn có thể ném ngoại lệ hoặc không sử dụng tham chiếu. 'boost :: optional' là một lựa chọn tuyệt vời, nhưng đó có thể là quá mức cần thiết; chỉ cần sử dụng một con trỏ. – GManNickG