Этот сценарий даже возможен?
class Base
{
int someBaseMemer;
};
template<class T>
class Derived : public T
{
int someNonBaseMemer;
Derived(T* baseInstance);
};
Цель:
Base* pBase = new Base();
pBase->someBaseMemer = 123; // Some value set
Derived<Base>* pDerived = new Derived<Base>(pBase);
Значение pDerived-> someBaseMemer должно быть equeal к pBase-> someBaseMember и похожий с другими основными участниками.
Почему бы вам на самом деле не закончить написание и компиляцию кода?
class Base
{
public: // add this
int someBaseMemer;
};
template<class T>
class Derived : public T
{
public: // add this
int someNonBaseMemer;
Derived(T* baseInstance)
: T(*baseInstance) // add this
{ return; } // add this
};
Это компилируется и запускается, как вы указали.
EDIT: Или вы имеете в виду, что someNonBaseMemer
должен быть равен someBaseMemer
?
Зачем вам одновременно извлекать и передавать базовый указатель? Выберите одно из них, ничто не мешает вам иметь и то, и другое. Используйте наследование, чтобы сделать всю работу за вас:
class Base
{
public:
Base(int x) : someBaseMemer(x) {}
protected: // at least, otherwise, derived can't access this member
int someBaseMemer;
};
template<class T>
class Derived : public T
{
int someNonBaseMemer;
public:
Derived(int x, int y) : someNonBaseMemer(y), T(x) {}
};
Derived<Base> d(42, 32); // usage
Хотя это не лучший выбор для дизайна.
Объявить someBaseMemr
общедоступным или изменить объявление с class
на struct
:
class Base
{
public:
int someBaseMemer;
};
OR
struct Base
{
int someBaseMemr;
};
Помните, что класс
по умолчанию имеет частный
доступ ко всем членам и методам. Структура
по умолчанию предоставляет общедоступный
доступ.
Кроме того, все производные классы должны иметь общедоступное
наследование от Base
.