我目前正在开发一个HTTP API,我想用它来对数据库进行CRUD操作。我尽量把它的代码写得尽可能的通用和模块化。我正在使用MySQL X DevAPI。
目前,我卡在了下面的问题上。
mysqlx::Result MySQLDatabaseHandler::jsonToCUDOperation (const nlohmann::json& json, mysqlx::Table& table, int crudEnum)
上面的函数的参数是一个json对象的引用,一个表对象的引用和一个整数。
我希望这个函数要做的是
例如,假设一个表 "users",以及一个json对象 "X",其内容如下:{"id":1, "username": "test_user", "email":"", "first_name": "test"}。
{"id":1, "username": "test_user", "email": "[email protected]", "first_name": "test"}。
现在,当我像这样调用函数时
jsonToCUDOperation(X, users, MySQLDatabaseHandler::cud::create);
我希望函数能够解析json对象,并根据json对象的键和值调用带有参数(和参数数)的mysqlx::Table::Insert函数,所以最终调用了
users.insert("id", "username", "email", "first_name") .values("1", "test_user", "[email protected]", "test").execute();
我一开始想用模板函数来实现这个行为,但后来我想这是没有意义的,因为模板函数的定义是在编译时生成的,而我所希望的需要在运行时的动态行为。所以我想按照我的意图设计是不可能的,因为我的理解是一个C++函数的行为不能在运行时根据你传递给它的参数而改变。但是我想,在我开始开发一个只能处理有限的json对象大小的解决方案之前,我想在这里问一下,以确保我实际上不能做我想要的事情。
先谢谢你对我的启发
实际上,你可以将STL容器传递给MySQL的X DevAPI所提供的CRUD函数。