两个类之间的共享方法
Shared method between two classes
我正在尝试在两个类之间共享一个方法,每个类都使用其私有属性,如下所示:
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
。
相关文章:
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- C++两个源文件之间共享的枚举的静态实例
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- Directx 12 :在两个进程之间共享图形内存
- 如何在进程之间共享大量数据而不重复?(国际刑罚委员会)
- 简单使用 std::atomic 在两个线程之间共享数据
- C++:在另外两个对象之间共享一个对象
- 在C++中的程序之间共享指针
- 拥有或在对象之间共享资源
- 在两个结构之间共享数组
- 如何在不同的CMakeList.txt之间共享变量?
- 在QT中的两个窗口之间共享websocket连接
- 在VS2017中,我们如何在项目成员之间共享编译设置
- 通过require在不同的Lua状态之间共享全局变量
- 在两个类实例之间共享向量
- OpenGL GLFW GLAD 在项目之间共享 Visual C++.
- 如何在C++中的不同翻译单元之间共享枚举的实例
- 在 c++ 中,在线程之间共享数据容器的最佳方法是什么?
- 在Emscripten和Qt之间共享OpenGL代码