接口会遇到派生类功能而不进行转换

时间:2018-02-16 08:23:10

标签: c++

如何从通用接口指针获取派生类对象。 我不想为了实现上述目的而输入通用接口。

e.g:

class Base {}; // Has pure virtual functions and is my interface class

class Derived : public Base {}; // Additional functions .

Base *b = new Derived();

现在,我希望从Derived *derived获取派生指针b而不进行强制转换。 我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

您的设置似乎很奇怪,我会寻找替代选项,例如直接返回Derived或将您需要的功能移动到基础中,因为您似乎需要它们。

如果您仍想这样做,可以使用以下内容:

class Derived;  // Forward declaration

class Base {
 public:
  virtual Derived* as_derived() { return null; }
...
};

class Derived : public Base {
 public:
  Derived* as_derived() override { return this; }
};

尽管如此,这看起来像是一个黑客,我建议改为投射。至少把它作为一种常见的模式,让其他人更容易理解。