我试图在两个类之间共享一个方法,每个类都使用其私有属性,如下所示:
class DbWriter {
public:
int GetIdFromDB(QString codVEI) //<! uses mDbWriteQuery
private:
QSqlQuery mDbWriteQuery;
}
class DbReader {
public:
int GetIdFromDB(QString codVEI) //<! uses mDbReadQuery
private:
QSqlQuery mDbReadQuery;
}
我想做类似朋友方法的事情,但是每个人都知道他们自己的属性成员,而不必创建一个类并从中继承这两个类,因为在我的情况下这是行不通的。
答案 0 :(得分:1)
如果您想共享一个实现,只需使用一个通用的免费功能:
val yourData = listOf<DataToUpdate>()
BatchUpdateStatement(FooTable).apply {
yourData.forEach {
addBatch(it.id)
this[FooTable.name] = it.name
this[FooTable.column] = it.field
}
execute(Transaction.current())
}
在两个类中都包含/链接它,并让它们调用它。
将查询作为参数传递,因为不会在混合中引入友谊,从而避免了无意义的耦合。
答案 1 :(得分:0)
我会使用多态类来做到这一点。例如
class DbObject
{
public:
virtual int GetIdFromDB(const QString &codVEI) = 0;
private:
QSqlQuery mQuery;
};
class DbWriter : public DbObject
{
public:
int GetIdFromDB(const QString &codVEI) override;
};
class DbReader : public DbObject
{
public:
int GetIdFromDB(const QString &codVEI) override;
};
用法:
auto dbObject = std::make_shared<DbWriter>();
int id = dbObject->GetIdFromDB("foo"); // Calls write query
dbObject = std::make_shared<DbReader>();
id = dbObject->GetIdFromDB("foo"); // Calls read query
更新
修复了DbReader
类声明-它也应该从DbObject
类派生。