c++ - 构造许多嵌套的类成员
问题描述
我想创建一个基类来处理不同数据库系统的许多 SQL 语句。
我的基本想法是这样的:
struct BaseSQLStmts {
BaseSQLStmts(Database db) : db(db) {};
// nested operator class Cmd.
struct Cmd {
Cmd(Database db, const char *sqlStmt)
: db(db), sqlStmt(sqlStmt), sqlHandle(Database::noHandle)
{};
Database::Handle operator() () {
if (sqlHandle==Database::noHandle) {
sqlHandle = db->prepareSQL(sqlStmt);
}
return sqlHandle;
}
Database db;
const char *sqlStmt;
Database::Handle sqlHandle;
};
// SQL-Statement to construct with database and SQL.
Cmd theSqlStmt;
// And many more (>50) members of type Cmd.
private:
Database db;
};
// later use:
BaseSQLStmts *dbSql = new SQLStmtsClassForDB(db);
// ...
db->execute(dbSql->theSqlStmt());
BaseSQLStmts::Cmd
问题是,如何通过创建派生类来构造具有数据库和 SQL 语句类型的所有成员(超过 50 个) 。我可以const char *
在构造函数中为每个 SQL 定义一个参数,但这是一个容易出错的参数数量。获取命名 SQL 语句virtual const char* theSqlStmtSQL() = 0
的虚拟成员函数不适用于构造函数(纯虚拟成员)。在派生类中构造也不起作用。
任何好主意如何通过编译时检查语句的完整性来处理这个问题?
解决方案
任何好主意如何在不使用复杂数据结构的情况下处理这个问题
这是自相矛盾的。如果您有超过 50个某种类型的值,您真的应该考虑将它们放入某个容器中。
当然,您的 50 个查询可以识别它们。甚至像
enum Queries { CreateFoo, GetBarOfFooByBaz, ..., Queries_Count }
std::vector<Cmd> commands(Queries_Count);
会有帮助的。
推荐阅读
- python - Flask-Moment 检查时间是否超过 24 小时前
- c++ - 我无法找到我的代码检查给定单词是否存在于矩阵中的问题
- batch-file - 创建一个扫描 .txt 文件然后将指定文本复制到另一个 .txt 文件的批处理文件(或其他可能的东西?)
- python - 在 Python 中并行化一个简单的循环并使用 concurrent.futures 获得结果
- python - 使用 pytube,我一直收到错误:yt is not defined
- node.js - node.js 中的 Forloop 快速路由
- pandas - 按名称过滤列后在数据框中填充nan
- python - 如何优化涉及数独求解器回溯的函数运行速度
- discord - 如何更改此脚本以通过用户 ID 踢用户?
- selenium - selenium/ 选择 sidebar_wrapper 中的元素