C++ c++;以后定义函数(在其他库中)?
我正在编写一个抽象库/类来访问数据库。 我想把它抽象化,这样我就可以轻松地更改我使用的数据库,而不会在以后的程序中遇到太多麻烦。我的目标是,如果我将数据库更改为仅连接到数据库的位置,则减少代码更改(1次更改包含的头文件/连接方法) 目前我在为不同的条件创建代码时遇到了问题。 我有一个名为ICondition的基类,它目前没有任何方法 以及我的固有类“WhereCondition”,它应该在例如SQL语句中表示WHERE条件。 并非每个SQL数据库都有一些人想要的相同语法(对于bools)(只是一个示例) 其中字段='0' 有些人只接受没有报价的bool。 因此,我需要该数据库类型的正确实现来生成SQL命令, 问题是我无法使WhereCondition虚拟,因为这样我就无法在不更改包含文件的情况下生成WhereCondition。这个问题的有效解决方案是什么 布局 库:C++ c++;以后定义函数(在其他库中)?,c++,C++,我正在编写一个抽象库/类来访问数据库。 我想把它抽象化,这样我就可以轻松地更改我使用的数据库,而不会在以后的程序中遇到太多麻烦。我的目标是,如果我将数据库更改为仅连接到数据库的位置,则减少代码更改(1次更改包含的头文件/连接方法) 目前我在为不同的条件创建代码时遇到了问题。 我有一个名为ICondition的基类,它目前没有任何方法 以及我的固有类“WhereCondition”,它应该在例如SQL语句中表示WHERE条件。 并非每个SQL数据库都有一些人想要的相同语法(对于bools)(只是一
- 数据库抽象
- IDatabase.hpp–纯虚拟类
- ICondition.hpp–纯虚拟类
- WhereCondition.hpp
- WhereCondition.cpp
- SQLite抽象(用于数据库的SQLite实现)
- SQLiteDatabase.hpp–IDatabase的sqlite实现
- SQLiteDatabase.cpp
- MYSQLAbstraction(用于数据库的MYSQL实现)
- MYSQLDatabase.hpp–IDatabase的mysql实现
- MYSQLDatabase.cpp
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
}