C++ で分散マップを実装し、適切な API 設計を探しています。最初の簡単なオプションは、std::map とまったく同じにすることです。問題はイテレータにあります。
IMap<std::string,Person>::iterator it;
it = map.find("sample");
if(it == map.end() ){
//NULL
}
for(it = map.begin(); it != map.end(); it++){
//iterate
}
分散コンテキスト(少なくとも私が実装しているコンテキスト)では、マップの開始と終了はありません。とにかく順序付けされていないため、イテレータを返すことはオプションのようには見えません。
2 番目のオプションは、以下のように値クラスをコピーして返すことです。
Person emptyPerson;
Person person = map.get("sample");
if(person == emptyPerson){
//NULL
}
問題は、NULL チェックが奇妙に見えることです。最初にオブジェクトが使用可能かどうかを尋ねてからオブジェクトを取得できますが、これらの操作はアトミックである必要があります。
3番目のオプションはポインタを返すことです:
Person* person = map.get("sample");
if(person == NULL){
//NULL
}
エラーが発生しやすいため、この方法は使用したくありません。ユーザーは、内部で作成したポインターを削除する必要があります。
次のようなユーザーオブジェクトをラップするクラスを返すことを考えています:
value_reference<std::map, Person> person = map.get("sample");
if(value_reference.hasValue() ){
Person p = value_reference;
}
では、最善のアプローチは何だと思いますか?
私の分散マップの要件に似た良いAPIを知っていますか?