Эту последовательность событий можно легко реализовать, внеся небольшое изменение в проект:
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
из своего родительского класса не иначе, как если бы он был его собственным членом класса.
, но классы шаблонов не могут переопределять виртуальные методы.
PS Тот, кто сказал вам, что был неправ.Шаблонные классы, безусловно, могут переопределять виртуальные методы.У меня здесь огромная иерархия шаблонов, все переопределяющие виртуальные методы их родительских классов, левый и правый.