两个类之间的共享方法

Shared method between two classes

本文关键字:之间 共享 方法 两个      更新时间:2023-10-16

我正在尝试在两个类之间共享一个方法,每个类都使用其私有属性,如下所示:

class DbWriter {
public:
int GetIdFromDB(QString codVEI)        //<! uses mDbWriteQuery
private:
QSqlQuery mDbWriteQuery;
}

class DbReader {
public:
int GetIdFromDB(QString codVEI)        //<! uses mDbReadQuery
private:
QSqlQuery mDbReadQuery;
}

我想制作类似朋友方法的东西,但是每个人都知道自己的属性成员,并且不必创建一个类并从中继承这两个类,因为它在我的情况下不起作用。

如果你想分享一个实现,只需使用一个通用的自由函数:

namespace detail {
int GetIdFromDB(QString codVEI, QSqlQuery const& query); 
}

将它与两个类包含/链接,并让它们调用它。

将查询作为参数传递,不会将友谊引入组合中,从而避免了无意义的耦合。

我会使用多态类来做到这一点。 例如

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