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 T
z 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ć null
wartoś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,last
jeśli żaden element nie pasuje.