map<string,string>的对象有办法转换成map<string,object>对象
时间: 2023-12-27 07:50:04 浏览: 74
可以使用模板元编程技术实现这个转换。以下是一个示例代码:
```c++
#include <map>
#include <string>
#include <type_traits>
template<typename T>
struct object_wrap {
T value;
};
template<typename T>
using is_object_wrap = std::is_same<T, object_wrap<typename T::value_type>>;
template<typename Map>
typename std::enable_if<!is_object_wrap<typename Map::mapped_type>::value, std::map<typename Map::key_type, object_wrap<typename Map::mapped_type>>>::type
convert_map(const Map& m) {
std::map<typename Map::key_type, object_wrap<typename Map::mapped_type>> result;
for (const auto& p : m) {
result.emplace(p.first, object_wrap<typename Map::mapped_type>{p.second});
}
return result;
}
template<typename Map>
typename std::enable_if<is_object_wrap<typename Map::mapped_type>::value, Map>::type
convert_map(const Map& m) {
return m;
}
int main() {
std::map<std::string, std::string> m1{{"key1", "value1"}, {"key2", "value2"}};
auto m2 = convert_map(m1);
for (const auto& p : m2) {
std::cout << p.first << ": " << p.second.value << std::endl;
}
return 0;
}
```
这个代码定义了一个辅助结构体 object_wrap,用于将 map 的值类型包装成一个对象类型,以便放入 map<string, object> 中。convert_map 函数使用 SFINAE 技术,根据输入的 map 的值类型是否为 object_wrap,分别进行转换。如果值类型不是 object_wrap,就将其包装成 object_wrap,然后放入新的 map 中返回;否则直接返回原来的 map。这样,就可以将 map<string, string> 转换成 map<string, object> 了。
阅读全文