我已经使用以下代码:
#include <string>
#include <map>
#include <vector>
typedef std::map<std::string, std::map<std::string, std::map<std::string, std::string> > > SCHEMA;
int main() {
SCHEMA tables;
// Schema table
tables["table_name"]["row_id"]["field_name"] = "value";
}
我想修改 typedef ,将“row_id”作为数字索引和任何类型的值(自动检测的种类)。我该怎么做才能实现这样的目标呢?
tables["table1"][0]["field1"] = "value of any type";
答案 0 :(得分:1)
数字索引很简单,只需将std::string
替换为int
即可。 “任何类型的值”对于获得正确的C ++来说可能很棘手,如果不仔细完成,可能会导致问题。您可以使用void *
(错误)或union
(确定),但更好的选择可能是某些变体实现,例如boost::variant,因此typedef
会读取,例如:
typedef std::map<std::string, std::map<int, std::map<std::string, boost::variant<int, std::string> > > > SCHEMA;