假设我有这样的代码:
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)?
假设我有这样的代码:
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)?
有什么理由你不能只修改你的 MakeD() 方法来返回一个新的 D 而不是传递一个指向 D 的指针?
IE。
D* MakeD(int params, int* status_out);
...
b = MakeD(params, &status);
还是 MakeD() 方法是其他人 API 的一部分?
就像是
B *b = use_d ? new D(params) : new <something else>;
应该管用。我假设其他东西可能是一个B
对象(可能是使用不同的参数构造的?)。它需要是B
或派生自B
代码的类才能工作。
而且,一如既往,不要使用 raw B*
,而是使用
std::unique_ptr<B> ptr( use_d ? new D(params) : new <something else> );
为什么不使用基本的 C++ 特性,例如类构造函数和多态性:B* b = new D(params);