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

时间:2018-08-08 14:40:51

标签: c++ dictionary data-sharing

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

我尝试过的

使用硬编码字符串映射

创作:

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;
}   
  • 解决了错字问题
  • 某些值可选时仍然存在问题
  • (据我所知)没有一种优雅的方法来获取枚举的字符串表示形式,即显示在表格中

问题

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

1 个答案:

答案 0 :(得分:1)

获取地图的值并将其解压缩为结构。可以在c ++ 17中使用boost::optionalstd::optional来表示可选值。