我正在用 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
}
在分布式环境中(至少在我正在实施的环境中),地图没有开始和结束。它无论如何都没有排序,因此返回迭代器看起来不像一个选项。
第二个选项是通过复制返回值类,如下所示:
Person emptyPerson;
Person person = map.get("sample");
if(person == emptyPerson){
//NULL
}
问题是 NULL 检查看起来很奇怪。可以先询问是否可用,然后获取对象,但要求是这些操作必须是原子的。
第三个选项是返回指针:
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 类似于要求我的分布式地图吗?