在C++中共享键值对的最佳方式

Best way of sharing key value pairs in C++

本文关键字:最佳 方式 键值对 共享 C++      更新时间:2023-10-16

当我尝试传递字符串对映射时,我觉得我的代码太多是硬编码的(字符串用作键(,而且不是很优雅。 这就是为什么我想问一下,在希望共享地图时是否有最佳实践。

我尝试过什么

使用硬编码字符串映射

创造:

std::map<std::string, std::string> GetDataAsMap(){
std::map<std::string, std::string> data;
data["id"] = ReadProperty("id");
...
return data;
}

消费:

auto dataMap = GetDataAsMap();
int id = dataMap["id"];

问题:

  • 硬编码字符串
  • 容易引入在编译时无法检测到的拼写错误
  • 使用者必须知道将存在哪些键(即处理可选值(

使用硬编码字符串进行映射,但也传递使用的键

std::map<std::string, std::string> GetDataAsMap(std::set<std::string>& keys){
std::map<std::string, std::string> data;
data["id"] = ReadProperty("id");
keys.insert("id");
...
return data;
}   

在这里,我可以迭代密钥,以防我只需要向用户显示数据,但除此之外,没有赢得太多

使用枚举值作为键进行映射

std::map<std::string, std::string> GetDataAsMap(){
std::map<std::string, std::string> data;
data[Keys::ID] = ReadProperty("id");
...
return data;
}   
  • 修复了拼写错误的问题
  • 当某些值是可选的时仍然存在问题
  • 没有优雅的方法(据我所知(来获取枚举的字符串表示形式,即显示在表中

问题

是否有任何最佳实践或方法比我在这里尝试过的更好?

获取映射的值并将它们解压缩到结构中。在 c++17 中,可选值可以使用 boost::optional 或 std::optional 来表示。