Jestem całkiem nowy w C ++, więc podczas nauki staram się projektować z dużą ilością Java-izmów. W każdym razie w Javie, gdybym miał klasę z metodą „wyszukiwania”, która zwróciłaby obiekt Tz obiektu Collection< T >pasującego do określonego parametru, zwróciłbym ten obiekt i gdyby obiekt nie został znaleziony w kolekcji, wróciłbym null. Wtedy w mojej funkcji wywoływania po prostu sprawdzałbymif(tResult != null) { ... }
W C ++ dowiaduję się, że nie mogę zwrócić nullwartości, jeśli obiekt nie istnieje. Chcę tylko zwrócić „wskaźnik” typu T, który powiadamia funkcję wywołującą, że nie znaleziono żadnego obiektu. Nie chcę rzucać wyjątku, ponieważ tak naprawdę nie jest to wyjątkowa okoliczność.
Tak wygląda teraz mój kod:
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;
}
Jak mogę to zmienić, żeby dać taki marker?
std::find(first, last, value)zwraca,lastjeśli żaden element nie pasuje.