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

C++ 如何在输出参数中使用基类,c++,inheritance,output-parameter,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... 今天我这样称呼它: class B {} class D : class B {} void MakeD(int params, D** o

假设我有这样的代码:

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...
今天我这样称呼它:

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”对象,但又不会丢失现有的类型安全性(即没有重新解释\u cast)?

是否有任何理由不能修改MakeD()方法以返回新的d,而不是传入指向d的指针


< P>或是MaxdD()方法是别人的API的一部分?

< p>为什么不使用基本的C++特性,如类构造函数和多态性:<代码> B*B=新D(PARAMS);<代码>

类似

B *b = use_d ? new D(params) : new <something else>; 

与其使用“out”参数,为什么不直接返回指针呢?我在这里看不到任何
D
对象实例化。您正在使用未定义的指针。MakeD内部发生了什么?更改标签。C没有类。这是C++@evanmcdonnal@LuchianGrigore好的,我不明白这一点。我所读的是一群人,他们可能写了可怕的C++代码,告诉你如何使用C++的所有可怕的特性,而不仅仅是类。在我的代码中,“out”是异步填写的,所以我不能更改MakeD以同步返回它,但很明显,我的问题中并没有规定该约束。