在调用基类之前需要在成员上调用方法
Need to call method on member before calling base class
>我有类似于以下内容的代码:
template<class BASE_TYPE = COdbcQuery>
class CRemoteQuery : public BASE_TYPE
{
CRemoteDatabase m_Db;
public:
CRemoteQuery()
: BASE_TYPE(&m_Db)
{
}
~CRemoteQuery()
{
}
};
我的问题是m_Db.Open()
在m_Db
传递给基构造函数之前必须调用
。如果我调用一个方法作为调用Open()
的基本构造函数的参数,它会失败m_Db
因为尚未初始化。
我尝试在基类中创建一个虚拟方法,该方法将在初始化期间调用,并且此类可以覆盖,但模板类无法覆盖虚拟方法。
重组我的基类以便不需要先打开m_Db
会引发许多难题。难道就没有办法吗?
通过进行小的设计更改,可以轻松实现以下事件序列:
class CRemoteDB {
protected:
CRemoteDatabase m_Db;
CRemoteDB()
{
m_Db.open();
}
};
template<class BASE_TYPE = COdbcQuery>
class CRemoteQuery : private CRemoteDB, public BASE_TYPE
{
public:
CRemoteQuery()
: BASE_TYPE(&m_Db)
{
}
~CRemoteQuery()
{
}
};
父类始终按声明顺序构造。首先构造CRemoteDB
父类,然后在父类的构造函数中调用CRemoteDatabase::open()
。
然后构造BASE_TYPE
,并获取指向打开的m_Db
的指针。
CRemoteQuery
可以从其父类访问m_Db
,这与访问其自己的类成员没有什么不同。
但模板类不能重写虚拟方法。
附言谁告诉你这是错的。模板类当然可以覆盖虚拟方法。我这里有大量的模板层次结构,它们都覆盖了其父类的虚拟方法,左和右。
相关文章:
- 无法调用成员函数,尝试正确执行此操作仍然失败
- 在 transform() 中调用成员函数
- C++::在构造函数退出之前通过指针调用成员函数
- 为什么我可以通过野生指针调用成员函数
- 从 Qt 中的信号调用成员函数的问题
- 调用C++成员函数指针,而不知道哪个类
- 如何从嵌套在命名空间中的类调用成员函数?
- 无法在非成员函数中调用成员函数
- 为什么分配了 nullptr 的指针可以调用成员函数?
- 通过带有成员函数指针的 QHash 调用成员函数的正确方法
- 使用可变参数模板调用成员函数
- 调用成员对象的构造函数
- 有没有办法在没有括号的情况下在C++中调用成员的getter/setter?
- 如何调用成员初始化器列表中参考成员的构造函数
- 使用按引用调用时,不能在没有对象的情况下调用成员函数 const
- 如果绝对没有调用成员函数,是否允许使用不完整类型的向量?如果是这样,从什么时候开始
- 在另一个成员函数中调用成员函数时'int'之前的预期主表达式
- 为什么调用成员函数不调用该对象的 ODR-USE?
- 如何在模板参数中调用成员
- 是否可以使用 EXPECT_CALL 来验证模拟对象的构造函数是否在某些时候调用成员函数?