JavaScript や PHP などの動的型付け言語では、次のような関数をよく実行します。
function getSomething(name) {
if (content_[name]) return content_[name];
return null; // doesn't exist
}
オブジェクトが存在する場合、または存在しない場合はオブジェクトを返しますnull
。
参照を使用して C++ で同等のものは何ですか? 一般的に推奨されるパターンはありますか?isNull()
この目的のためのメソッドを持ついくつかのフレームワークを見ました:
SomeResource SomeClass::getSomething(std::string name) {
if (content_.find(name) != content_.end()) return content_[name];
SomeResource output; // Create a "null" resource
return output;
}
次に、呼び出し元は次のようにリソースをチェックします。
SomeResource r = obj.getSomething("something");
if (!r.isNull()) {
// OK
} else {
// NOT OK
}
ただ、このようなマジックメソッドをクラスごとに実装するのは重そうです。また、オブジェクトの内部状態を「null」から「not null」に設定する必要がある場合も明らかではないようです。
このパターンに代わるものはありますか?ポインターを使用して実行できることは既に知っていますが、参照を使用してどのように/できるか疑問に思っています。それとも、C++ で "null" オブジェクトを返すことをあきらめて、C++ 固有のパターンを使用する必要がありますか? それを行う適切な方法についての提案をいただければ幸いです。