Tôi khá mới với C ++ nên tôi có xu hướng thiết kế với rất nhiều Java-isms trong khi học. Dù sao, trong Java, nếu tôi có lớp với phương thức 'tìm kiếm' sẽ trả về một đối tượng T
từ một Collection< T >
tham số phù hợp với một tham số cụ thể, tôi sẽ trả về đối tượng đó và nếu đối tượng không được tìm thấy trong bộ sưu tập, tôi sẽ trả về null
. Sau đó, trong chức năng gọi của tôi, tôi sẽ chỉ kiểm traif(tResult != null) { ... }
Trong C ++, tôi phát hiện ra rằng tôi không thể trả về một null
giá trị nếu đối tượng không tồn tại. Tôi chỉ muốn trả về một 'chỉ báo' kiểu T thông báo cho hàm đang gọi rằng không có đối tượng nào được tìm thấy. Tôi không muốn đưa ra một ngoại lệ vì nó không thực sự là một trường hợp ngoại lệ.
Đây là mã của tôi trông giống như ngay bây giờ:
class Node {
Attr& getAttribute(const string& attribute_name) const {
//search collection
//if found at i
return attributes[i];
//if not found
return NULL; // what should this be?
}
private:
vector<Attr> attributes;
}
Làm cách nào để thay đổi nó để tôi có thể cung cấp loại điểm đánh dấu đó?
std::find(first, last, value)
trả vềlast
nếu không có phần tử nào khớp.