时,这种情况下甚至可能吗?

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
}; 

此编译和运行作为指定。

编辑:?还是你的意思是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;
};

记住,class必须通过默认所有成员和方法private访问。甲struct默认提供public访问。

此外,所有派生类应具有public继承从Base

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top