0

私がこのようなコードを持っているとしましょう:

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なしで)これを書くためのよりクリーンな方法はありますか?

4

3 に答える 3

1

Dへのポインターを渡す代わりに、MakeD()メソッドを変更して新しいDを返すことができない理由はありますか?

すなわち。

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

...

b = MakeD(params, &status);

または、MakeD()メソッドは他の誰かのAPIの一部ですか?

于 2012-11-19T23:58:47.170 に答える
0

クラスコンストラクタやポリモーフィズムなどの基本的なC++機能を使用してみませんか。B* b = new D(params);

于 2012-11-20T00:00:26.707 に答える
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> );
于 2012-11-20T00:04:10.993 に答える