我想使用<<
and>>
运算符加载并保存到外部数据库。外部数据库必须实现什么才能使其工作?
想法或经验?我正在使用 SQL 与我的 sqlite3 数据库进行交互。
例如,我想说:
MyClass c;
c >> databaseInstance;
c << databaseInstance;
databaseInstance
需要是某种类型,提供以您想要的方式写入数据库的函数,从而提供类似流的接口operator>>
。operator<<
这些函数的定义有点像这样:
database_type& operator<<(database_type& databaseInstance, MyClass& c)
{
// Write to database here
return databaseInstance;
}
database_type& operator>>(database_type& databaseInstance, MyClass& c)
{
// Read from database here
return databaseInstance;
}
这利用了运算符重载。没有什么比这更多的要说的了,使用数据库是一件很奇怪的事情,因为数据库不像流。
为了与 C++ 标准库保持一致,您可能希望反转运算符的使用:
MyClass c;
databaseInstance << c;
databaseInstance >> c;
但是,不确定最后一行将读入您的MyClass
对象的确切内容。databaseInstance
只有在将其配置为插入特定表时,第二行才真正有意义。
唔。有趣的..
好的,我假设您只想在 operator>> 的情况下从数据库中选择,而在 operator<< 的情况下插入/更新。这里的诀窍是知道要读/写哪些列。
您可以使用流操纵器(例如将整数输出转换为十六进制格式的“十六进制”)来确定要使用的列,因此您将拥有类似
int c;
DBStreamInterface db(tableA);
c << columnA << db;
或者您可以定义一个与表具有相同布局的结构类型,并将整行读入其中:
struct TableRow {
int columnA;
string columnB;
};
TableRow t << db;
但是您必须小心将数据库中的架构与结构的定义相匹配(除非您想全力以赴地生成模板代码,您可以通过读取架构 DDL 并动态分配来创建适当的结构类构造函数中每个字段的存储)。