C++ c++;以后定义函数(在其他库中)?

C++ c++;以后定义函数(在其他库中)?,c++,C++,我正在编写一个抽象库/类来访问数据库。 我想把它抽象化,这样我就可以轻松地更改我使用的数据库,而不会在以后的程序中遇到太多麻烦。我的目标是,如果我将数据库更改为仅连接到数据库的位置,则减少代码更改(1次更改包含的头文件/连接方法) 目前我在为不同的条件创建代码时遇到了问题。 我有一个名为ICondition的基类,它目前没有任何方法 以及我的固有类“WhereCondition”,它应该在例如SQL语句中表示WHERE条件。 并非每个SQL数据库都有一些人想要的相同语法(对于bools)(只是一

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

目前我在为不同的条件创建代码时遇到了问题。 我有一个名为ICondition的基类,它目前没有任何方法 以及我的固有类“WhereCondition”,它应该在例如SQL语句中表示WHERE条件。 并非每个SQL数据库都有一些人想要的相同语法(对于bools)(只是一个示例) 其中字段='0' 有些人只接受没有报价的bool。 因此,我需要该数据库类型的正确实现来生成SQL命令, 问题是我无法使WhereCondition虚拟,因为这样我就无法在不更改包含文件的情况下生成WhereCondition。这个问题的有效解决方案是什么

布局

库:

  • 数据库抽象

    • IDatabase.hpp–纯虚拟类
    • ICondition.hpp–纯虚拟类
    • WhereCondition.hpp
    • WhereCondition.cpp
  • SQLite抽象(用于数据库的SQLite实现)

    • SQLiteDatabase.hpp–IDatabase的sqlite实现
    • SQLiteDatabase.cpp
  • MYSQLAbstraction(用于数据库的MYSQL实现)
    • MYSQLDatabase.hpp–IDatabase的mysql实现
  • MYSQLDatabase.cpp
Idatabase.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

#包含//我只想更改的文件
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
} 
#包括
#包括
虚无乐趣(IDatabase db){
db.select(“field”,WhereCondition(“otherfield”,true))//如果WhereCondition是虚拟的,则不起作用
} 
现在调用select的SQLite实现,但是我需要一种方法将WhereCondition转换为符合SQLite对其SQL命令的约定的字符串。
有没有一种方法可以向WhereCondition类中添加一个函数,该函数可以通过适当的数据库实现来实现/更改?

老实说,SQL流行是有原因的,关系数据库对此非常习惯。根据我的经验,添加这样的层从来没有真正起过作用。如果您担心可移植性,请尽可能坚持使用标准SQL,并且不要编写十亿个不同的查询……老实说,SQL流行是有原因的,关系数据库对此非常习惯。根据我的经验,添加这样的层从来没有真正起过作用。如果您担心可移植性,请尽可能坚持使用标准SQL,并且不要编写十亿个不同的查询。。。
    #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
}