首页 > 解决方案 > c++ 稍后定义函数(在其他库中)?

问题描述

我正在编写一个抽象库/类来访问数据库。我想让它抽象化,这样我就可以在以后的程序中轻松更改我正在使用的数据库,而不会遇到太多麻烦。我的目标是,如果我将数据库更改为仅连接到数据库的位置(1x 更改包含的头文件/连接方法),则减少我的代码更改

目前我无法为不同的条件创建代码。我有一个名为 ICondition 的基类,它目前没有任何方法,而我的继承类“WhereCondition”应该表示例如 SQL 语句中的 WHERE 条件。并非每个 SQL 数据库都具有某些人想要的相同语法(对于布尔值)(只是一个示例) WHERE field = '0' 有些人只接受不带引号的布尔值。所以我想要该数据库类型的正确实现来生成 SQL 命令,问题是我无法将 WhereCondition 设为虚拟,因为这样我就无法在不更改包含文件的情况下生成 WhereCondition。该问题的有效解决方案是什么?

布局

库:

数据库.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 类添加一个可以由适当的数据库实现来实现/更改的函数?

标签: c++

解决方案


推荐阅读