创建一个以容器 "X "为参数的函数,该函数将X.size()参数传递给它所调用的变量函数。

问题描述 投票:0回答:1

我目前正在开发一个HTTP API,我想用它来对数据库进行CRUD操作。我尽量把它的代码写得尽可能的通用和模块化。我正在使用MySQL X DevAPI。

目前,我卡在了下面的问题上。

mysqlx::Result MySQLDatabaseHandler::jsonToCUDOperation (const nlohmann::json& json, mysqlx::Table& table, int crudEnum)

上面的函数的参数是一个json对象的引用,一个表对象的引用和一个整数。

我希望这个函数要做的是

  • 检查整数来决定执行什么操作。
  • 检查json的大小,以了解有多少参数将被传递给X DevAPI的变量函数,该函数用于执行操作。
  • 组装并执行函数调用

例如,假设一个表 "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对象大小的解决方案之前,我想在这里问一下,以确保我实际上不能做我想要的事情。

先谢谢你对我的启发

c++ variadic-functions
1个回答
0
投票

实际上,你可以将STL容器传递给MySQL的X DevAPI所提供的CRUD函数。

© www.soinside.com 2019 - 2024. All rights reserved.