Zwracanie „NULL reference” w C ++?
W językach z dynamicznym typowaniem, takich jak JavaScript lub PHP, często wykonuję takie funkcje, jak:
<code>function getSomething(name) { if (content_[name]) return content_[name]; return null; // doesn't exist } </code>
Zwracam obiekt, jeśli istnieje lubnull
Jeśli nie.
Jaki byłby odpowiednik w C ++ za pomocą referencji? Czy jest ogólnie jakiś zalecany wzór? Widziałem pewne ramy mająceisNull()
metoda do tego celu:
<code>SomeResource SomeClass::getSomething(std::string name) { if (content_.find(name) != content_.end()) return content_[name]; SomeResource output; // Create a "null" resource return output; } </code>
Następnie rozmówca sprawdziłby zasób w ten sposób:
<code>SomeResource r = obj.getSomething("something"); if (!r.isNull()) { // OK } else { // NOT OK } </code>
Jednak implementacja tego rodzaju magicznej metody dla każdej klasy wydaje się ciężka. Również nie wydaje się oczywiste, kiedy wewnętrzny stan obiektu powinien być ustawiony z „null” na „not null”.
Czy jest jakaś alternatywa dla tego wzoru? Wiem już, że można to zrobić za pomocą wskaźników, ale zastanawiam się, jak / jeśli można to zrobić za pomocą odniesień. Czy powinienem zrezygnować z zwracania obiektów „null” w C ++ i używać jakiegoś wzorca specyficznego dla C ++? Wszelkie sugestie dotyczące właściwego sposobu postępowania byłyby mile widziane.