c++ - c++ 稍后定义函数(在其他库中)?
问题描述
我正在编写一个抽象库/类来访问数据库。我想让它抽象化,这样我就可以在以后的程序中轻松更改我正在使用的数据库,而不会遇到太多麻烦。我的目标是,如果我将数据库更改为仅连接到数据库的位置(1x 更改包含的头文件/连接方法),则减少我的代码更改
目前我无法为不同的条件创建代码。我有一个名为 ICondition 的基类,它目前没有任何方法,而我的继承类“WhereCondition”应该表示例如 SQL 语句中的 WHERE 条件。并非每个 SQL 数据库都具有某些人想要的相同语法(对于布尔值)(只是一个示例) WHERE field = '0' 有些人只接受不带引号的布尔值。所以我想要该数据库类型的正确实现来生成 SQL 命令,问题是我无法将 WhereCondition 设为虚拟,因为这样我就无法在不更改包含文件的情况下生成 WhereCondition。该问题的有效解决方案是什么?
布局
库:
数据库抽象
- IDatabase.hpp – 纯虚拟类
- ICondition.hpp – 纯虚类
- WhereCondition.hpp
- WhereCondition.cpp
SQLiteAbstraction(用于数据库的 SQLite 实现)
- SQLiteDatabase.hpp – IDatabase 的 sqlite 实现
- SQLiteDatabase.cpp
- MYSQLAbstraction(用于数据库的 MYSQL 实现)
- MYSQLDatabase.hpp – IDatabase 的 mysql 实现
- MYSQL数据库.cpp
数据库.hpp
Class Idatabase {
public:
Value select(const std::string& fieldName, const Icondition& condition);
}
WhereCondition.hpp
Class WhereCondition : public Icondition {
private:
std::string fieldName
Value data;
….
public:
WhereCondition(const std::string& fieldName, const Value& data);
}
程序 main.cpp
#include <SQLiteAbstraction/SqliteDatabase.hpp> // Only file I want to change
sqliteDatabase.connect(...)
其他文件
#include <DatabaseAbstraction/Idatabase.hpp>
#include <DatabaseAbstraction/WhereCondition.hpp>
void fun(IDatabase db) {
db.select(“field”, WhereCondition(“otherfield”, true)) //Wouldn’t work if WhereCondition is Virtual
}
现在调用了 select 的 SQLite 实现,但我需要一种方法将 WhereCondition 转换为适合 SQLite 对其 SQL 命令的约定的字符串。有没有办法向 WhereCondition 类添加一个可以由适当的数据库实现来实现/更改的函数?
解决方案
推荐阅读
- ios - 如何为多个目标使用一个 XCTestCase 类
- apache-nifi - 拆分文本处理器不拆分我的输入文件
- python - 如何使用 Python libcloud 访问 Google 存储桶中的文件夹“/”?
- tomcat - 如何在 Tomcat 的 Cookie 处理器中设置 SameSite Cookie?
- scala - Scala 集合未在简单的 Akka Streams 操作中实现
- javascript - RxJs 主题未在生产环境中触发订阅,但可用于开发和测试
- uwp - 从 Microsoft Store 安装应用程序会使用缓存的开发应用程序
- reactjs - 如何使用 React 将 jsx 存储到变量中?
- c - 为什么我在以下代码中出现分段错误?
- grails3 - 在 grails3 中无法访问静态资源。我该如何解决?