如何在输出参数中使用基类

时间:2012-11-19 23:51:47

标签: c++ inheritance output-parameter

说我有这样的代码:

class B {}
class D : class B {}

void MakeD(int params, D** out, int* status_out);

今天我称之为:

B* b;
if (use_d) {
  D* d;
  MakeD(params, &d, &status)
  b = d;
} else...

是否有更简洁的方法来避免单独的'd'对象,但不会丢失现有的类型安全(即没有reinterpret_cast)?

3 个答案:

答案 0 :(得分:1)

有什么理由你不能修改你的MakeD()方法来返回一个新的D而不是传入指向D的指针?

D* MakeD(int params, int* status_out);

...

b = MakeD(params, &status);

或者MakeD()方法是别人API的一部分吗?

答案 1 :(得分:0)

为什么不使用基本的C ++特性,例如类构造函数和多态:B* b = new D(params);

答案 2 :(得分:0)

这样的东西
B *b = use_d ? new D(params) : new <something else>; 

应该有效。我假设其他东西可能是B对象(可能使用不同的参数构建?)。它必须是B或派生自B的类才能使代码生效。

并且,与往常一样,不要使用原始B*,而是使用

std::unique_ptr<B> ptr( use_d ? new D(params) : new <something else> );